Перейти к содержимому

Обратный прокси 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 on
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /notifly/stream(.*) ws://127.0.0.1:NOTIFLY_PORT/stream$1 [P,L]