Apache mod_remoteip и журналы доступа

9

Начиная с Apache 2.4 я начал использовать mod_remoteip вместо mod_extract_forwarded для перезаписи адреса клиента из x-forwarded-for, предоставляемого серверами внешнего интерфейса (лак, squid, apache и т. Д.).

Пока что все отлично работает с модулями, т.е. php, cgi, wsgi и т. Д. - адреса клиентов отображаются в порядке, но я не могу записать адрес клиента в журналах доступа (% a,% h,% {c } а). Не повезло - я всегда получаю 127.0.0.1 (localhost forward ex.).

Как записать IP-адрес клиента при использовании mod_remoteip?

Обновление: ОНО РАБОТАЕТ - см. Ответ ниже

GioMac
источник
Вы можете добавить конкретную конфигурацию, которую вы используете / протестировали. Кроме того, хотя и не в деталях, это может помочь: knowledgevoid.com/blog/2012/01/13/... Я предполагаю , что вы действительно читали httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header как хорошо? У stackexchange есть несколько вопросов, которые вы, возможно, захотите прочитать: stackoverflow.com/questions/25455731/…
Деннис Нольте
перестроена конфигурация, теперь она работает O_O
GioMac

Ответы:

20

Конфигурация лака:

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;
    }
}
GioMac
источник
1
Если вы принимаете этот ответ, вы должны присудить награду, даже если это ваш собственный ответ.
mc0e
Не могли бы вы обновить это или дать нам вариант http.cf-connection-ip от CloudFlare? Не повезло, заставляя его работать, извините.
Руслан Абузант
На самом деле вы должны использовать $ proxy_add_x_forwarded_for вместо $ remote_addr для Nginx X-Forwarded-For. Это выполняет те же функции, что и в примере Varnish, тогда как $ remote_addr не включает в себя предыдущие значения X-Forwarded-For
Энди
4

Согласно документации mod_remoteip , модуль должен просто заменить IP-адрес клиента, но только когда RemoteIPHeader x-forwarded-forон установлен ( doc ). Также убедитесь, что в журнале вашего vhost используется CustomLog, который вы определили.

Sgaduuw
источник