2016-11-25 624 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终止和其他功能。