@VladVol

Почему socket.io не работает через проксю?

Есть приложение в /web/myapp/. Клиент подрубается к:
let socket = io.connect('http://domain.com/web/myapp/ ', {path: '/myapp'});


Прокся настроена так:
upstream myapp_socket {
   ip_hash;
   server 127.0.0.1:8080;
}

location /web/myapp/ {
   proxy_pass http://myapp_socket/;

   proxy_read_timeout 1000s;

   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_set_header Host $http_host;
   proxy_set_header X-Forwarded-For $remote_addr;
   proxy_redirect off;
   proxy_pass_request_headers on;
   proxy_cache off;
   proxy_buffering off;
}


Вопрос: почему все это не работает без этого указания на socket.io???

location ~ ^/(socket\.io) {
   proxy_pass http://myapp_socket;
   
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade"; 
}


А у вас без этого локейшена сокет работает?
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
потому что socket.io "слушает путь" /socket.io, а не просто "напрямую"
https://github.com/socketio/socket.io/blob/master/...
Ответ написан
Комментировать
@VladVol Автор вопроса
Тогда чтобы запустить второе приложение, мне придется дублировать это правило под новый upstream?
Как это правильно делается?

upstream myapp_2_socket {
   ip_hash;
   server 127.0.0.1:2255;
}

location /web/myapp2/ {
   proxy_pass http://myapp_2_socket/;
   ...
}

location ~ ^/(socket\.io) {
   proxy_pass http://myapp_2_socket;
   ...
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы