2016-11-25 31 views
1

我可以把我的頭纏住......我們有要求使用隱藏在NGINX代理後面的ActiveMQ,但我不知道如何設置它。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將映射到新的定義,但這是行不通的。

對於通信,我們在版本3.1.4中使用NodeJs庫amqp10。

並且所有端口都在服務器上啓用...如果使用沒有nginx代理的標準端口,它就可以工作。

任何想法我錯過了什麼?感謝您的任何想法。

回答

1

Nginx是一個能夠代理WebSocket和HTTP的HTTP服務器。

但是您正在嘗試爲AMQP客戶端代理OpenWire。這對Nginx或Node.js不起作用。

所以 - 如果您真的需要使用Nginx,您需要通過WebSocket將客戶端協議更改爲STOMP或MQTT。然後在Nginx中設置一個WebSocket代理。

帶有TLS的Nginx示例。更多細節在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終止和其他功能。