Начиная с Apache 2.4 я начал использовать mod_remoteip вместо mod_extract_forwarded для перезаписи клиентского адреса от x-forwarded-for, обеспеченного серверами фронтэнда (лак, сквид, апач и т.д.).
До сих пор все хорошо работает с модулями, т.е. php, cgi, wsgi и т.д.... - клиентские адреса показывают, как они должны быть, но я не мог записать клиентский адрес в журналах доступа (%a, %h, % {c} a). Никакая удача - я всегда добираюсь 127.0.0.1 (localhost вперед напр.).
Как зарегистрировать IP-адрес клиента при использовании mod_remoteip?
Обновление: РАБОТЫ IT O_O - видят ответ ниже
Конфигурация лака:
if (req.restarts == 0) {
if (req.http.X-Forwarded-For) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
Разделы конфигурации apache 2.4:
mod_remoteip:
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/8
ведение журнала (% a выполняет работу):
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+
, если впереди находится nginx (например, завершение SSL):
server {
listen 123.123.123.123:443;
server_name server.com;
root html;
ssl on;
ssl_certificate /etc/pki/httpd/site/chain.crt;
ssl_certificate_key /etc/pki/httpd/site/private.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:6081;
proxy_set_header Host $http_host;
proxy_pass_header Server;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Согласно документации mod_remoteip, модуль должен просто заменить IP-адрес клиента, но только при установке RemoteIPHeader x-forwarded-for
(doc).
Также убедитесь, что ваш лог-фантом использует заданный вами CustomLog.