Eu estava com o problema exato e encontrei esta solução simples:
Configure seu cliente socket.io do seu arquivo js / html para conectar-se a partir do subdiretório (A configuração padrão do socket.io terá suas rotas de conexão do socket.io para link socket.io ). você pode descobrir como fazer isso aqui: get socket .io executando a partir do subdiretório .
para que você queira isso no seu arquivo de cliente:
var socket = io.connect('http://example.com', {path: "/app1socket"});
e para outro aplicativo:
var socket = io.connect('http://example.com', {path: "/app2socket"});
E, como você fez antes, crie rotas para cada soquete de aplicativo no nginx:
location /app1socket/ {
proxy_pass http://127.0.0.1:3000/socket.io/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /app2socket/ {
proxy_pass http://127.0.0.1:4000/socket.io/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Assumindo que seus aplicativos executados no nginx sejam uma solicitação HTTP para um aplicativo localmente em execução, deixe a configuração do arquivo do servidor de acordo com a configuração padrão.
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen(4000, '127.0.0.1');
Agora você pode fazer vários aplicativos do socket.io sob nginx.