Node.js Websocket代理传递到不同的路由
我正在尝试在不同的位置设置不同的socket.io服务器,例如: socket.yourdomain.com/app1 socket.yourdomain.com/app2 执行 此子域使用有效的ssl证书进行保护,而不是自签名 nginx vhostNode.js Websocket代理传递到不同的路由,node.js,sockets,ssl,nginx,socket.io,Node.js,Sockets,Ssl,Nginx,Socket.io,我正在尝试在不同的位置设置不同的socket.io服务器,例如: socket.yourdomain.com/app1 socket.yourdomain.com/app2 执行 此子域使用有效的ssl证书进行保护,而不是自签名 nginx vhost server { listen 443; ssl on; ssl_certificate /etc/nginx/ssl/some_cert_chain.crt; ssl_certificate_key /etc/n
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/some_cert_chain.crt;
ssl_certificate_key /etc/nginx/ssl/somekey.key;
server_name socket.yourdomain.com;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:1340/;
}
location /app1/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:1340/;
}
location /app2/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:1341/;
}
}
服务器代码
var socket_server = require('socket.io');
var io = socket_server.listen(1340);
io.on('connection', function(client) {
console.log('connected!');
io.emit('status', status);
});
如果我连接到/location上的socket.io服务器,它工作正常,但是在任何应用程序路由下都没有响应(作为测试,我在每个端口上使用了相同的socket服务器代码,所以我知道不是这样)
nginx版本:nginx/1.4.6(Ubuntu)您已经使用URI(端口值后面的/字符)指定了代理传递。这是故意的吗?因为如果不是,这很可能就是您的配置无法按预期工作的原因。文档中指出,如果proxy_pass指令是用URI指定的,那么当请求被传递到服务器时,与位置匹配的规范化请求URI部分将被该指令中指定的URI替换。因此,在任何情况下,发送到后端服务器的请求URI实际上都是/,而不是/app1/或/app2/。我尝试了很多不同的版本,包括在端口后删除/。使用一个子域和多个位置时,最好的方法是什么?我使用了您的Nginx配置和服务器代码,一切正常。您能否同时显示主应用程序和app1的客户端代码?