Недавно я унаследовал инфраструктуру, в которой все пользователи проходят через AWS ELB -> прокси nginx -> AWS ELB -> Apache. Проблема, которую я вижу, заключается в том, что IP-адрес клиента отображается дважды в Apache, строка, подобная этой:
"x.x.x.x, x.x.x.x" - - [26/Oct/2016:18:59:10 +0000] "GET /....
Журнал доступа nginx для этого виртуального хоста прекрасен и хорош:
x.x.x.x - - [26/Oct/2016:18:59:10 +0000] "GET /
Проблема в том, что я не совсем уверен, как отлаживать, где это теряется. Я предполагаю, что это либо заголовки, которые отправляет nginx, либо что-то странное в Apache, хотя я подозреваю, что это заголовки X-Forwarded-For, которые передает nginx. Вот соответствующая конфигурация виртуального хоста для затронутого домена:
location / {
if ($xxx-example-com-maintenance) {
return 503;
}
if ($http_origin ~* (https?://xxx\.example\.com)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass $upstream;
Теперь формат журнала Apache выглядит так:
LogFormat "\"%{X-Forwarded-For}i\" %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" SESSION-%{frontend}C %h" forwarded
Последний был скопирован из предыдущего веб-стека и работал нормально. Вроде застрял здесь, потому что с моей точки зрения все выглядит хорошо. Я нашел nginx real_ip_header и X-Forwarded-For кажется неправильным однако я использую nginx 1.10. Версия Apache - 2.4.23. Будем признательны за любые идеи о том, как устранить эту неполадку. Заранее спасибо.
Оказывается, заголовок X-Forwarded-For должен вести себя подобным образом, и решение заключалось в использовании другого заголовка, который не использовал ELB - в моем случае X-Real-IP. Теперь я могу видеть в журналах только один IP-адрес.