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


9

Починаючи з Apache 2.4, я почав використовувати mod_remoteip замість mod_extract_forwarded для перезапису клієнтської адреси з x-forwarded-для, наданого серверами frontend (лак, кальмар, apache тощо).

Поки все добре працює з модулями, тобто php, cgi, wsgi тощо ... - адреси клієнтів відображаються такими, якими вони повинні бути, але я не зміг записати адресу клієнта у журнали доступу (% a,% h,% {c } а). Не пощастило - я завжди отримую 127.0.0.1 (localhost форвард колишній).

Як зареєструвати ip-адресу клієнта під час використання mod_remoteip?

Оновлення: IT WORKS O_O - див. Відповідь нижче


ви можете додати конкретну конфігурацію, яку ви використовуєте / протестували. Додатково, хоча це не в деталях, це може допомогти: knowledgevoid.com/blog/2012/01/13/… Я припускаю, що ви читали httpd.apache.org/docs/trunk/mod/mod_remoteip.html#page-header aswell? у stackexchange є кілька питань, які ви можете прочитати: stackoverflow.com/questions/25455731/…
Dennis Nolte,

відновлена ​​конфігурація, тепер вона працює
O_O

Відповіді:


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;
    }
}

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.