Модуль Apache mod_proxy_wstunnel
| Описание: | Модуль поддержки веб-сокетов для mod_proxy
|
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | proxy_wstunnel_module |
| Исходный файл: | mod_proxy_wstunnel.c |
| Совместимость: | Доступен в httpd 2.4.5 и более поздних версиях |
Сводка
Начиная с Apache HTTP Server 2.4.47, обновление протокола (туннелирование) можно эффективнее обрабатывать с помощью mod_proxy_http.
См. Обновление протокола.
Для работы этого модуля требуется mod_proxy. Он обеспечивает туннелирование соединений веб-сокетов к серверу веб-сокетов в бэкенде. Соединение автоматически переключается на соединение веб-сокета:
Ответ HTTP
Upgrade: WebSocket Connection: Upgrade
Проксирование запросов к серверу веб-сокетов, например echo.websocket.org, можно настроить с помощью директивы ProxyPass:
ProxyPass "/ws2/" "ws://echo.websocket.org/" ProxyPass "/wss2/" "wss://echo.websocket.org/"
Одновременное проксирование HTTP и веб-сокетов, когда определённый набор URL предназначен только для веб-сокетов, можно настроить, указав директиву ProxyPass для веб-сокетов перед директивой HTTP:
ProxyPassMatch ^/(myApp/ws)$ ws://backend.example.com:9080/$1 ProxyPass / http://backend.example.com:9080/
Одновременное проксирование HTTP и веб-сокетов, когда URL веб-сокетов не предназначены исключительно для веб-сокетов или заранее неизвестны, можно настроить с помощью директивы RewriteRule:
ProxyPass / http://example.com:9080/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://example.com:9080/$1" [P,L] Балансировку нагрузки между несколькими бэкендами можно настроить с помощью mod_proxy_balancer.
Модуль также можно использовать для переключения на протоколы, отличные от WebSocket, задав параметру обновление протокола в директиве ProxyPass имя пользовательского протокола. Специальные значения upgrade=NONE и upgrade=ANY можно использовать для тестирования или принудительного переключения протокола, но по соображениям безопасности их не рекомендуется использовать в рабочей среде. NONE означает, что проверка заголовка пропускается, но переключение на WebSocket и туннелирование всё равно всегда выполняются. ANY означает, что переключение протокола и туннелирование будут выполняться с использованием любого протокола, запрошенного клиентом.
Директива ProxyWebsocketFallbackToProxyHttp
| Описание: | Указывает этому модулю передать обработку запроса модулю mod_proxy_http |
|---|---|
| Синтаксис: | ProxyWebsocketFallbackToProxyHttp On|Off |
| Значение по умолчанию: | ProxyWebsocketFallbackToProxyHttp On |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_proxy_wstunnel |
| Совместимость: | Доступен в httpd 2.4.48 и более поздних версиях |
Начиная с httpd 2.4.47, mod_proxy_http может обрабатывать переключение на WebSocket и туннелирование в соответствии с RFC 7230. Эта директива определяет, должен ли mod_proxy_wstunnel передавать обработку запроса для этого модулю mod_proxy_http; по умолчанию это происходит.
Значение Off позволяет модулю mod_proxy_wstunnel обрабатывать запросы WebSocket так же, как в httpd 2.4.46 и более ранних версиях.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_proxy_wstunnel.html