Я использую Apache / 2.4.27
Внутри VirtualHost я перенаправляю IP-заголовок удаленного клиента из Loadbalancer с помощью:
RemoteIPHeader X-Forwarded-For
Что необходимо приложению, обслуживаемому этим виртуальным хостом.
Это формат журнала в основном контексте httpd.conf.
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Когда у меня есть RemoteIPHeader X-Forwarded-For, указанный в виртуальном хосте, Apache перестает записывать IP-адрес удаленного клиента в журналы.
Когда я удаляю его с VirtualHost, IP-адрес удаленного клиента снова начинает появляться в журналах.
Любые идеи, почему RemoteIPHeader X-Forwarded-For
не играет с (%{X-Forwarded-For}i)
из LogFormat?
Спасибо !
Восстановите% a в этот формат, если собираетесь использовать mod_remoteip.
В bugzilla mod_remoteip заполняет% a, а удаляет из% {X-Forwarded-For} i. Таким образом, в простом случае с одним доверенным прокси% a будет содержать значение, используемое для просмотра в X-Forwarded-For из-за mod_remoteip
Прокси-слой (Nginx)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Бэкэнд-уровень (Apache)
# Log format config
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" common
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/access_log" common env=forwarded
# Header config
RemoteIPHeader X-Real-IP
RemoteIPHeader X-Client-IP
RemoteIPInternalProxy 192.168.10.10 192.168.10.11
Описание:
proxy_set_header - директива устанавливает заголовки, которые nginx отправляет бэкэнду; поэтому в этом примере мы отправляем две переменные (в заголовки): X-Forwarded-For
и X-Real-IP
X-Forwarded-For - на стороне прокси должно быть установлено, что этот заголовок должен передаваться бэкэндам и быть доступным с их уровня
X-Real-IP - он не влияет на необходимые переменные на веб-странице, но мы оставляем его включенным, чтобы сервер Apache помещал адрес клиента в журналы (вам также необходимо установить сам формат журнала):
### X-Real-IP enabled
172.217.20.206 - - [03/Jun/2017:11:12:11 +0200] "GET /tls-check.php?9832 HTTP/1.0" 200 1409
### X-Real-IP disabled
172.16.21.11 - - [03/Jun/2017:15:12:49 +0200] "GET /tls-check.php?13266 HTTP/1.0" 200 1448
Завиток
:~$ curl -H Cache-Control: no-cache -ks https://example.com/tls-check.php?${RANDOM} | grep "HTTP_X_FORWARDED_FOR\|HTTP_X_REAL_IP\|SERVER_ADDR\|REMOTE_ADDR"
[HTTP_X_FORWARDED_FOR] => 172.217.20.206
[HTTP_X_REAL_IP] => 172.217.20.206
[SERVER_ADDR] => 192.168.10.100
[REMOTE_ADDR] => 192.168.10.10
tls_check.php
<?php
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
exit;
?>
Попробуйте заключить его между \" \"
так же, как это делается с заголовками реферер и пользовательский агент
LogFormat "%h \"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Я добавляю это как ответ, чтобы получить форматирование, вместо комментария к правильному ответу @ DaWe4444. Хотя это правильно, я сначала этого не понял.
Чтобы пояснить, моя последняя конфигурация завершилась как:
RemoteIPHeader Client-ip
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy my.proxy.ip.address
который работает для восходящего сервера Apache Traffic Server на Apache 2.4.25 на Debian.
Мне нужно было изменить строку объединенного формата журнала в apache2.conf следующим образом:
-LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
Некоторые рецепты требуют переключения формата журнала на основе заголовков X-Forwarded-For, но mod_remoteip отключает этот заголовок, поэтому они не работают с mod_remoteip. Поскольку% h требует затрат на поиск DNS (% a - это просто IP-адрес клиента), я был удивлен, обнаружив, что это значение по умолчанию. Раньше отключение DNS по запросам было одним из первых действий каждого администратора apache; Эту часть обработают анализаторы файлов журнала.
Меня устраивает. Заменен% h на% a
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined