2016-11-25 6 views
1

Я могу обернуть свою голову ... У нас есть требование, использующее ActiveMQ, скрытое за прокси-сервером NGINX, но я понятия не имею, как его настроить.ActiveMQ и NGINX

Для ActiveMQ я установки различных портов для всех протоколов

<transportConnectors> 
     <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> 
     <transportConnector name="openwire" uri="tcp://0.0.0.0:62716?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="amqp" uri="amqp://0.0.0.0:5782?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="stomp" uri="stomp://0.0.0.0:62713?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1993?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     <transportConnector name="ws" uri="ws://0.0.0.0:62714?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    </transportConnectors> 

И конфигурации Nginx, как это:

server { 
    listen *:61616; 
    server_name   192.168.210.15; 

    index index.html index.htm index.php; 

    access_log   /var/log/nginx/k1.access.log combined; 
    error_log    /var/log/nginx/k1.error.log; 

    location/{ 
    proxy_pass   http://localhost:62716; 
    proxy_read_timeout 90; 
    proxy_connect_timeout 90; 
    proxy_redirect  off; 
    proxy_method   stream; 
    proxy_set_header  Host $host; 
    proxy_set_header  X-Real-IP $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header  Proxy ""; 
    } 
} 

(то же для всех остальных пяти переопределены портов)

Я бы сказал, что это откроет порты по умолчанию портов ActiveMQ, а Nginx отобразит их в новое определение, но это не сработает.

Для связи мы используем библиотеку NodeJs amqp10 в версии 3.1.4.

И все порты включены на сервере ... если используются стандартные порты без прокси-сервера nginx, он работает.

Кто-нибудь знает, что мне не хватает? Спасибо за любые мысли.

ответ

1

Nginx - это HTTP-сервер, способный проксировать WebSocket и HTTP.

Но вы пытаетесь прокси OpenWire для клиента AMQP. Что не работает с Nginx или Node.js.

Так что, если вам действительно нужно использовать Nginx, вам необходимо изменить протокол клиента на STOMP или MQTT поверх WebSocket. Затем настройте прокси-сервер WebSocket в Nginx.

Nginx-пример с TLS. Подробнее на https://www.nginx.com/blog/websocket-nginx/

upstream websocket { 
    server amqserver.example.com:62714; 
} 
server { 
    listen 8883 ssl; 
    ssl on; 
    ssl_certificate /etc/nginx/ssl/certificate.cer; 
    ssl_certificate_key /etc/nginx/ssl/key.key; 

    location/{ 
     proxy_pass http://websocket; 
     proxy_http_version 1.1; 
     proxy_set_header Upgrade websocket; 
     proxy_set_header Connection upgrade; 
     proxy_read_timeout 120s; 
    } 
} 

Однако, так как вы должны переписать весь код клиента, я бы переосмыслить идею Nginx. Существуют другие программные и аппаратные средства, которые могут работать на серверах на основе TCP и заканчивать TLS и многое другое.