У меня есть :
Apache
(v2.4) на 80 -й порт моего сервера дляwww.domain1.com
, с mod_proxy и mod_proxy_wstunnel включенnode.js + socket.io
на порт 3001 того же сервера.
Доступ www.domain2.com
(через порт 80) перенаправляется на 2. благодаря методу, описанному здесь . Я установил это в конфигурации Apache:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Он работает для всего, кроме части веб-сокета: ws://...
не передаются, как должен, через прокси.
Когда я открываю страницу www.domain2.com
, у меня есть:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Вопрос: Как сделать прокси-сервер Apache также и WebSockets?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
не работало меня правильно. Предлагаю использоватьRewriteCond %{HTTP:Upgrade} =websocket [NC]
вместо этого.Вместо фильтрации по URL-адресу вы также можете фильтровать по заголовку HTTP. Эта конфигурация будет работать для любых веб-приложений, использующих веб-сокеты, даже если они не используют socket.io:
источник
Может будет полезно. Просто все запросы отправляются через ws на узел
источник
Начиная с Socket.IO 1.0 (май 2014 г.), все подключения начинаются с запроса HTTP-опроса (подробнее здесь ). Это означает, что помимо пересылки трафика WebSocket вам необходимо пересылать любые
transport=polling
HTTP-запросы.Приведенное ниже решение должно правильно перенаправлять весь трафик сокетов, без перенаправления любого другого трафика.
Включите следующие моды Apache2:
Используйте эти настройки в вашем файле * .conf (например
/etc/apache2/sites-available/mysite.com.conf
). Я добавил комментарии, чтобы объяснить каждую часть:Я включил дополнительный раздел для маршрутизации
/node
трафика, который мне удобен, см. Здесь для получения дополнительной информации.источник
RewriteRule /path/(.*)
С помощью этих ответов я наконец получил обратный прокси для Node-RED, работающего на Raspberry Pi с работающими Ubuntu Mate и Apache2, используя эту конфигурацию сайта Apache2:
Мне также пришлось включить такие модули:
источник
Для меня это работает после добавления только одной строки в httpd.conf, как показано ниже (жирная линия).
Версия Apache - 2.4.6 для CentOS.
источник
Моя установка:
/api/ws
Как упоминалось выше @Basj, убедитесь, что прокси a2enmod и ws_tunnel включены.
Это снимок экрана с конфигурационным файлом Apache, который решил мою проблему:
Соответствующая часть в виде текста:
Надеюсь, это поможет.
источник
Сделал следующее для приложения Spring, запускающего статический контент, контент для отдыха и веб-сокет.
Apache используется в качестве прокси и конечной точки SSL для следующих URI:
Конфигурация Apache
Я использую ту же конфигурацию vHost для конфигурации SSL, нет необходимости менять что-либо, связанное с прокси.
Конфигурация пружины
источник
Воспользуйтесь этой ссылкой, чтобы найти эффективное решение для WS https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Вам нужно просто выполнить шаг ниже ..
Перейти к
/etc/apache2/mods-available
Шаг 1
Включите
mode proxy_wstunnel.load
с помощью команды нижеШаг 2
Перейти к
/etc/apache2/sites-available
и добавьте строку ниже в свой файл .conf внутри виртуального хоста
Примечание: 8080 означает, что ваш порт Tomcat работает, потому что мы хотим подключиться к тому месту,
ws
где наш файл War, помещенный в tomcat, и tomcat обслуживает apachews
. СпасибоМоя конфигурация
источник
Для «опросного» транспорта.
Сторона Apache:
Сторона клиента:
источник
В дополнение к основному ответу: если у вас есть более одной службы на одном сервере, который использует веб-узлы, вы можете сделать это, чтобы разделить их, используя настраиваемый путь (*):
Узловой сервер:
Клиентский HTML:
Конфигурация Apache:
(*) Примечание: использование значения по умолчанию
RewriteCond %{REQUEST_URI} ^/socket.io
не будет специфичным для веб-сайта, и запросы веб-сокетов будут смешиваться между разными веб-сайтами!источник
ДЕЛАТЬ:
Установите Apache 2.4 (не работает с 2.2)
a2enmod proxy
иa2enmod proxy_wstunnel.load
Сделайте это в конфигурации Apache,
просто добавьте две строки в свой файл, где 8080 - это ваш запущенный порт tomcat
источник