Назад | Перейти на главную страницу

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

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

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

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

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

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

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 установлено (док). Также убедитесь, что ведение журнала вашего виртуального хоста использует определенный вами CustomLog.