Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Websocket代理传递到不同的路由_Node.js_Sockets_Ssl_Nginx_Socket.io - Fatal编程技术网

Node.js Websocket代理传递到不同的路由

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

我正在尝试在不同的位置设置不同的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/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的客户端代码?