У меня есть сервер, на котором я запускаю веб-сайт, приложение и сервер NodeJS, чтобы поддерживать мою связь через веб-сокет через socketIO.
Я следовал этому руководству [https://xpo6.com/socket-io-via-apache-reverse-proxy], с тем чтобы мои веб-сокеты были доступны через порт 80/443, а не через порт 3000, который прослушивает сервер NodeJS. Мне это нужно, поскольку я обнаружил, что на компьютерах, на которых мне нужно запустить приложение, порт 3000 заблокирован.
У меня успешно работает var socket = io.connect('http://yourpublicDomain.com/');
со страниц моего веб-приложения, так как страница загружается без ошибок и, по-видимому, подключается к NodeJS. Тем не менее, мое настоящее общение через веб-сокет в какой-то момент сбивается.
- Веб-сервер NodeJS протестирован и работает, обслуживая запросы через порт 3000.
- Страницы Webapp могут корректно загружать страницы без ошибок.
- Localhost / держит сайт
- Localhost / webapp содержит веб-приложение
- Localhost / webapp / node - это то место, где установлен NodeJS, а мой JS запускается.
Вот изменения, которые я внес в 000-default-le-ssl.conf, как описано в руководстве:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://myIP:3000/$1 [P,L]
SSLProxyEngine on
ProxyPass /webapp https://myIP:3000
ProxyPassReverse /webapp https://myIP:3000
ProxyPass /socket.io https://myIP:3000/socket.io
ProxyPassReverse /socket.io https://myIP:3000/socket.io
Может кто-нибудь сказать мне, почему сообщения websocket не возвращаются на сервер NodeJS после следования руководству, тогда как к ним обращались по локальному хосту: 3000 из сети с 3000 открытых.
Спасибо, выдернула мои волосы!