Вопрос или проблема
- Apache 2.4.52
- Ubuntu 22.04.5 LTS
- Сервер AWS EC2 за балансировщиками нагрузки
Я использовал %{X-Forwarded-For}i
, чтобы получить IP-адрес клиента в логах для обработки fail2ban, пока не прочитал это в конфигурационном файле.
Обратите внимание, что использование %{X-Forwarded-For}i вместо %h не рекомендуется. Используйте mod_remoteip вместо.
Я проверил, и remoteip уже был установлен и загружен. Он загружается в remoteip.load со следующей строкой:
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
Я создал remoteip.conf и написал в него следующие строки.
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy = 35.170.149.235 52.202.248.219 34.232.106.28 54.234.162.178 3.232.179.245 44.205.134.80
RemoteIPInternalProxy = 172.0.8.172 172.0.7.138 172.0.7.148 172.0.7.22 172.0.6.0/24 172.0.5.0/24 172.0.0.233
Когда я запускаю apachectl configtest, я получаю следующее:
scottd:/etc/apache2$ sudo apachectl configtest
AH00526: Синтаксическая ошибка на строке 2 в /etc/apache2/conf-enabled/remoteip.conf:
RemoteIP: Ошибка разбора IP = (Имя или служба не известна) для RemoteIPTrustedProxy
Действие 'configtest' не прошло.
Если я переставлю строку RemoteIPInternalProxy
выше RemoteIPTrustedProxy
, он жалуется на строку RemoteIPInternalProxy
.
Я удалил все IP, кроме одного, и ошибка все равно осталась?
Я просто не вижу никакой ошибки в этом очень простом конфигурационном файле?
Посмотрите на эту строку в ошибке:
RemoteIP: Ошибка разбора IP = (Имя или служба не известна) для RemoteIPTrustedProxy
Конфигурация не может разобрать знак =
, как указано здесь; она пытается обработать =
как IP-адрес:
Ошибка разбора IP =
Учитывая это, попробуйте удалить знаки =
из каждой строки:
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 35.170.149.235 52.202.248.219 34.232.106.28 54.234.162.178 3.232.179.245 44.205.134.80
RemoteIPInternalProxy 172.0.8.172 172.0.7.138 172.0.7.148 172.0.7.22 172.0.6.0/24 172.0.5.0/24 172.0.0.233
Ответ или решение
Проблема, с которой вы столкнулись при использовании mod_remoteip
в конфигурации Apache2, связана с синтаксисом, который используется для определения доверенных прокси-серверов. Давайте рассмотрим, почему возникает ошибка и как ее исправить.
Анализ проблемы
Согласно вашему описанию, вывод команды apachectl configtest
указывает на ошибку синтаксиса, которую вы видите здесь:
RemoteIP: Error parsing IP = (Name or service not known error) for RemoteIPTrustedProxy
Это сообщение разъясняет, что модуль mod_remoteip
не может правильно обработать введенные вами параметры. Основной проблемой является использование знака равенства (=
) в строках конфигурации, что является нарушением корректного синтаксиса для директив RemoteIPTrustedProxy
и RemoteIPInternalProxy
.
Исправление конфигурации
Чтобы устранить возникшую ошибку, вам нужно удалить знак равенства из директив. Ваша конфигурация должна выглядеть следующим образом:
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 35.170.149.235 52.202.248.219 34.232.106.28 54.234.162.178 3.232.179.245 44.205.134.80
RemoteIPInternalProxy 172.0.8.172 172.0.7.138 172.0.7.148 172.0.7.22 172.0.6.0/24 172.0.5.0/24 172.0.0.233
Причины ошибки
-
Неверный синтаксис: Знак равенства не требуется в инструкции
RemoteIPTrustedProxy
иRemoteIPInternalProxy
. Эти директивы принимают список IP-адресов и CIDR-блоков без разделителей. -
Сообщения об ошибках: Apache ожидает увидеть IP-адреса или CIDR-адреса сразу после директивы. Поэтому при обнаружении знака равенства, который не соответствует ожиданиям Apache, возникает указанная вами ошибка.
Рекомендации
- После внесения изменений в файл конфигурации, обязательно выполните команду
sudo apachectl configtest
для проверки синтаксиса. Если все правильно, вы увидите сообщение о том, что конфигурация правильная. - Не забывайте перезапускать Apache после изменения конфигурации с помощью команды
sudo systemctl restart apache2
, чтобы изменения вступили в силу.
Следуя этим рекомендациям, вы сможете успешно настроить mod_remoteip
и устранить возникшую проблему с конфигурацией Apache2.