использовать Apache для прокси только запросы socket.io к бэкэнду узла - PullRequest
0 голосов
/ 18 октября 2019

tldr: я только хочу установить конфигурацию Apache на запросы proxy socket.io, а не на ВСЕ запросы.

Я работаю над проектом Vue.js, обслуживаемым через Laravel (Apache),и сервер API nodeJS. Laravel в настоящее время обрабатывает отправку запросов API на сервер узла за кулисами. Laravel работает на порту 80, а приложение узла на порту 3000. Недавно мы добавили библиотеку socket.io. Вместо того, чтобы идти через laravel, я просто подключился напрямую к серверу узла на localhost:3000. Это хорошо работало для разработки, но теперь мне нужно настроить прокси с Apache. Я уже делал обратный прокси через Apache, так что я знаю, что это работает, но в прошлом у меня никогда не было laravel, управляющего прокси / пересылкой API. ТАК вопрос, как я могу прокси ТОЛЬКО на socket.io запросы и нелицензионно мой websocket?

Я видел много сообщений о том, как это сделать. Вот моя текущая конфигурация

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/app/public
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory /var/www/app/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
  </Directory>
  RewriteEngine on

  RewriteCond %{QUERY_STRING} transport=websocket
  RewriteRule /(.*)   ws://localhost:3000/$1 [P,L]

  RewriteCond ${HTTP:Upgrade} =websocket [NC]
  RewriteCond ${HTTP:Connection} upgrade [NC]
  RewriteRule .* "ws:/localhost:3000/$1" [P,L]

  ProxyRequests off
  ProxyPass /socket.io   ws://localhost:3000/socket.io
  ProxyPassReverse /socket.io  ws://localhost:3000/socket.io
</VirtualHost>

, как вы видите, у меня настроен проход прокси с /socket.io. Если я установлю его на /, приложение разрывается, когда apache пытается проксировать все запросы

Вот код клиентского сокета

this.socket = io(location.origin , {
  transports: ['websocket']
});

и в настоящее время выдается ошибка 503 подтверждения

WebSocket connection to 'ws://localhost/socket.io/?EIO=3&transport=websocket' failed: Error during WebSocket handshake: Unexpected response code: 503

примечание: я включил эти моды Apache proxy proxy_http proxy_wstunnel

Большое спасибо в продвинутом

UPDATE Это все работает в Docker, иЯ продолжал думать, что это ничего не должно изменить. НО localhost внутри докера не работал, так как он был в сети 172.17.0.1. Использование этого IP вместо localhost сделало свое дело!

...