Задать вопрос

Как запустить socket.io по WS[WSS] проксированный на другой сервер?

Есть сервер mysite.com Запущен nginx версии == 1.16.0. Линк mysite.com/app проксируется на mysite-srv.com:30001. На mysite-srv.com запущен nodejs и приложение на socket.io на порту == 30001. Клиент подключается к mysite.com/app - все работает. Конфиг nginx:

Конфиг nginx
server {

  ...

  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] ?
  • Вопрос задан
  • 158 просмотров
Подписаться 4 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы