Есть сервер mysite.com Запущен nginx версии == 1.16.0. Линк mysite.com/app проксируется на mysite-srv.com:30001. На mysite-srv.com запущен nodejs и приложение на socket.io на порту == 30001. Клиент подключается к mysite.com/app - все работает. Конфиг nginx:
Конфиг nginxserver {
...
location /app/ {
proxy_pass http://mysite-srv.com/app:30001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
location /socket.io/ {
proxy_pass http://mysite-srv.com/app:30001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
...
}
Сейчас появился еще клиент. Хочу сделать чтобы он подключался на mysite.com/app2 (который проксируется на mysite-srv.com:30002). И тут я поплыл ) При выборе протокола обмена socket.io отправляет GET-запрос на mysite.com/socket.io/(.*), чтобы направить его куда мне надо, я поправил конфиг nginx:
Конфиг nginx (исправленный)server {
...
location /app/ {
location /app/1/ {
proxy_pass http://mysite-srv.com/app:30001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
location /app/2/ {
proxy_pass http://mysite-srv.com/app:30002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
#Здесь я направляю куда мне надо
if ($http_referer ~* /app/1/.*) {
proxy_pass http://mysite-srv.com/app:30001;
}
if ($http_referer ~* /app/2/.*) {
proxy_pass http://mysite-srv.com/app:30002;
}
}
...
}
При таком подходе не работает WS (только Polling), т.к. http_referer нет. Как заставить работать socket.io через WS[WSS] ?