2016-11-25 10 views
1

Ich kann meinen Kopf wickeln ... Wir haben Anforderung mit ActiveMQ hinter NGINX Proxy versteckt, aber ich habe keine Ahnung, wie Sie es einrichten.ActiveMQ und NGINX

Für die ActiveMQ Ich habe Setup verschiedene Ports für alle Protokolle

<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> 

Und die nginx Konfiguration wie folgt aus:

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 ""; 
    } 
} 

(für alle anderen fünf neu definierten Ports)

Ich würde zwar die Standardports ActiveMQ-Ports verfügbar machen und Nginx würde sie der neuen Definition zuordnen, aber das funktioniert nicht.

Für die Kommunikation verwenden wir die NodeJs-Bibliothek amqp10 in Version 3.1.4.

Und alle Ports sind auf dem Server aktiviert ... wenn Sie Standard-Ports ohne Nginx-Proxy verwenden, funktioniert es.

Jemand Idee, was fehlt mir? Danke für irgendwelche Gedanken.

Antwort

1

Nginx ist ein HTTP-Server, der WebSocket und HTTP proxysen kann.

Aber Sie versuchen, OpenWire für einen AMQP-Client Proxy. Was nicht mit Nginx oder Node.js funktioniert.

Also - wenn Sie wirklich Nginx verwenden müssen, müssen Sie Client-Protokoll zu STOMP oder MQTT über WebSocket ändern. Dann richten Sie einen WebSocket-Proxy in Nginx ein.

Nginx-Beispiel mit TLS. Weitere Informationen unter 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; 
    } 
} 

Da jedoch Sie alle Client-Code neu zu schreiben, würde ich die Nginx Idee überdenken. Es gibt andere Software und Hardware, die TCP-basierte Server ansprechen und TLS-Terminierung durchführen können.