Обратный прокси Apache
Вот примеры конфигурации для установки Apache в качестве обратного прокси для Notifly.
Требуются следующие модули:
- mod_proxy
- mod_proxy_wstunnel
- mod_proxy_http
Проксирование запросов
Заголовок раздела «Проксирование запросов»<VirtualHost *:80> ServerName domain.tld
Keepalive On
# Прокси должен сохранять хост, так как notifly проверяет хост с origin # для подключений WebSocket ProxyPreserveHost On
# Проксировать запросы websocket к /stream ProxyPass "/stream" ws://127.0.0.1:NOTIFLY_PORT/stream retry=0 timeout=60
# Проксировать все остальные запросы к / ProxyPass "/" http://127.0.0.1:NOTIFLY_PORT/ retry=0 timeout=5
ProxyPassReverse / http://127.0.0.1:NOTIFLY_PORT/</VirtualHost>Проксирование запросов с подпутём
Заголовок раздела «Проксирование запросов с подпутём»<VirtualHost *:80> ServerName domain.tld Keepalive On
Redirect 301 "/notifly" "/notifly/"
# Прокси должен сохранять хост, так как notifly проверяет хост с origin # для подключений WebSocket ProxyPreserveHost On
# Проксировать запросы websocket к /stream ProxyPass "/notifly/stream" ws://127.0.0.1:NOTIFLY_PORT/stream retry=0 timeout=60
# Проксировать все остальные запросы к / ProxyPass "/notifly/" http://127.0.0.1:NOTIFLY_PORT/ retry=0 timeout=5 # ^- !!косая черта в конце обязательна!!
ProxyPassReverse /notifly/ http://127.0.0.1:NOTIFLY_PORT/</VirtualHost>Диагностика проблем
Заголовок раздела «Диагностика проблем»При некоторых дополнительных конфигурациях Apache ProxyPass для конечной точки /stream может работать неправильно.
Запрос не выполняется с ошибкой 400 Bad Request и в журнал Notifly записывается следующая ошибка:
Error #01: websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' headerЧтобы исправить эту проблему, добавьте следующее правило переписывания в конфигурацию виртуального хоста:
RewriteEngine onRewriteCond %{HTTP:Connection} upgrade [NC]RewriteCond %{HTTP:Upgrade} websocket [NC]RewriteRule /notifly/stream(.*) ws://127.0.0.1:NOTIFLY_PORT/stream$1 [P,L]