Ich habe das Web-Stomp-Plugin von RabbitMQ aktiviert, indem ich this folge, weil wir STOMP über WebSockets benötigen und es funktioniert. Jetzt brauche ich einen Nginx-Server als Reverse-Proxy vor meinem RabbtMQ-Server. Hier ist der Konfigurationsteil von Nginx Server wie folgt.Wie kann ich Nginx als Reverse-Proxy für die Websocket-Funktion meines RabbitMQ verwenden?
http {
upstrem websocket {
# this is the actual rabbitmq server address
server 15.15.181.73:15674
}
server {
# the nginx server addres is 15.15.182.108
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
location /ws/ {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
}
}
}
Und hier ist der JavaScript-Code für den Zugriff auf den Server
var WebSocket = require('ws');
var Stomp = require('stompjs');
var ws = new WebSocket('ws://15.15.182.108/ws', {
protocolVersion: 8,
origin: 'http://15.15.182.108/ws',
rejectUnauthorized: false
});
var client = Stomp.over(ws);
var on_connect = function(){
client.send("/queue/test", {priority: 9}, "Hello, STOMP for /queue/test");
};
var on_error = function(error){
console.log("error");
console.log(error.headers.message);
};
client.connect('test','test',on_connect,on_error,'/');
Nun, was verwirrend mich ist, dass, wenn ich den rabbitmq Server über Websockets zugreifen müssen, dann sollte ich /ws
nach der IP-Adresse anhängen und es funktioniert, wenn ich direkt darauf zugreife. Es scheint jedoch, dass ich die /ws
im upstream
Abschnitt nach der IP-Adresse in der Nginx-Konfigurationsdatei nicht setzen kann. Was soll ich tun, wenn ich diese Arbeit machen muss? Vielen Dank.