Реальный IP-адрес клиента не отражается в apache2 при использовании WebSockets ⇐ Apache
-
Anonymous
Реальный IP-адрес клиента не отражается в apache2 при использовании WebSockets
В настоящее время я использую Apache2 и настроил конфигурацию для работы с WebSockets. Вот моя конфигурация Apache2:
Имя сервера abc.example.org ПроксиПасс / http://x.x.x.x:80/ ProxyPassReverse / http://x.x.x.x:80/ ProxyPreserveHost включен Прокси-запросы отключены Перезаписать двигатель включен #Вебсокет RewriteCond %{REQUEST_URI} ^/ws [NC] RewriteCond %{QUERY_STRING} транспорт=опрос [NC] RewriteRule /(.*) http://x.x.x.x:80/$1 [P] RewriteCond %{REQUEST_URI} ^/ws [NC] RewriteCond веб-сокет %{HTTP:Upgrade} [NC] RewriteRule /(.*) ws://x.x.x.x:80/$1 [P] RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy x.x.x.x Заказать запретить, разрешить Тип аутентификации Базовый AuthName "--== Пожалуйста, пароль ==--" AuthUserFile /etc/apache2/htpasswords/abc Требовать действительного пользователя Отказаться от всех Включить strict_rules.conf Удовлетворить любой Кроме того, я реализовал базовую аутентификацию в своей настройке. Я также установил правила в своем файле конфигурации (restrict_rules.conf), позволяющие подключаться с частных IP-адресов без необходимости базовой аутентификации. Все работает нормально, за исключением соединений WebSocket, которые требуют базовой аутентификации даже при подключении из локальной сети. В журналах Apache я обнаружил ошибку, указывающую на сбой базовой аутентификации:
[Ср, 3 января 11:54:53.318225 2024] [access_compat:error] [pid 2954245] [клиент 127.0.0.1:46862] AH01797: клиент запрещен конфигурацией сервера: proxy:ws://x.x.x.x.: 80/WS Однако базовую аутентификацию следует отключить для локальных (интранет) подключений. Это работает правильно для стандартных запросов HTTP/HTTPS, но не для WebSockets. Когда я отключаю базовую аутентификацию, веб-сокет работает без проблем.
Я подозреваю, что проблема возникает из-за того, что в журналах WebSocket клиент всегда отображается как 127.0.0.1. Я не знаю, как изменить это на реальный IP-адрес клиента. Я настроил X-Forwarded-For, и он хорошо работает для прокси-соединений без WebSocket. Но я изо всех сил пытаюсь отразить реальный IP-адрес клиента в соединениях WebSocket. Мы будем очень признательны за любые предложения или идеи о том, как решить эту проблему.
В настоящее время я использую Apache2 и настроил конфигурацию для работы с WebSockets. Вот моя конфигурация Apache2:
Имя сервера abc.example.org ПроксиПасс / http://x.x.x.x:80/ ProxyPassReverse / http://x.x.x.x:80/ ProxyPreserveHost включен Прокси-запросы отключены Перезаписать двигатель включен #Вебсокет RewriteCond %{REQUEST_URI} ^/ws [NC] RewriteCond %{QUERY_STRING} транспорт=опрос [NC] RewriteRule /(.*) http://x.x.x.x:80/$1 [P] RewriteCond %{REQUEST_URI} ^/ws [NC] RewriteCond веб-сокет %{HTTP:Upgrade} [NC] RewriteRule /(.*) ws://x.x.x.x:80/$1 [P] RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy x.x.x.x Заказать запретить, разрешить Тип аутентификации Базовый AuthName "--== Пожалуйста, пароль ==--" AuthUserFile /etc/apache2/htpasswords/abc Требовать действительного пользователя Отказаться от всех Включить strict_rules.conf Удовлетворить любой Кроме того, я реализовал базовую аутентификацию в своей настройке. Я также установил правила в своем файле конфигурации (restrict_rules.conf), позволяющие подключаться с частных IP-адресов без необходимости базовой аутентификации. Все работает нормально, за исключением соединений WebSocket, которые требуют базовой аутентификации даже при подключении из локальной сети. В журналах Apache я обнаружил ошибку, указывающую на сбой базовой аутентификации:
[Ср, 3 января 11:54:53.318225 2024] [access_compat:error] [pid 2954245] [клиент 127.0.0.1:46862] AH01797: клиент запрещен конфигурацией сервера: proxy:ws://x.x.x.x.: 80/WS Однако базовую аутентификацию следует отключить для локальных (интранет) подключений. Это работает правильно для стандартных запросов HTTP/HTTPS, но не для WebSockets. Когда я отключаю базовую аутентификацию, веб-сокет работает без проблем.
Я подозреваю, что проблема возникает из-за того, что в журналах WebSocket клиент всегда отображается как 127.0.0.1. Я не знаю, как изменить это на реальный IP-адрес клиента. Я настроил X-Forwarded-For, и он хорошо работает для прокси-соединений без WebSocket. Но я изо всех сил пытаюсь отразить реальный IP-адрес клиента в соединениях WebSocket. Мы будем очень признательны за любые предложения или идеи о том, как решить эту проблему.
Мобильная версия