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
сделало свое дело!