Получение журналов доступа Apache 2.4 для отображения IP-адреса клиента вместо 127.0.0.1 с помощью Varnish с использованием mod_remoteip

На всю жизнь я не мог заставить mod_remoteip получать IP-адреса клиентов в моих журналах доступа Apache. Я работаю над настройкой Virtualmin с установленным Varnish 4 перед Apache 2.4.7. Как заставить его работать?


person curiouser    schedule 22.08.2014    source источник


Ответы (1)


Наконец-то я получил IP-адреса клиентов в журнале и нашел здесь последний шаг:

Вот шаги, чтобы заставить его работать:

  1. Заставьте Varnish передать заголовок Apache с IP-адресом клиента. Вы делаете это, включая этот фрагмент кода (найденный в этом ответ) в самом начале вашего vcl_recv:

    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;
      }
    }
    
  2. Теперь включите mod_remoteip в Apache.

  3. Отредактируйте конфигурацию Apache, чтобы сообщить mod_remoteip, какой заголовок содержит IP-адрес клиента (из документов Apache< /а>). Я использую X-Forwarded-For, но я полагаю, что это может быть что угодно, если оно соответствует тому, что вы настроили для передачи Varnish:

    RemoteIPHeader X-Forwarded-For

  4. Если вы перезапустите Apache и Varnish прямо сейчас, могу поспорить, что Apache теперь будет везде ссылаться на IP-адрес клиента, а не на 127.0.0.1. За исключением журналов доступа, которые я проверял. Чтобы журналы доступа отображали IP-адрес клиента, нам нужно изменить формат журнала, который использует Apache. В моем случае это был «комбинированный» формат. Это был мой прорыв, и я нашел его здесь который ссылается на эту прекрасную информацию для наших целей .

Вот как выглядел мой комбинированный формат журнала:

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

И я просто заменил %a вместо %h, и вот как это выглядит:

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

И, наконец, вот как выглядит блок моего конфигурационного файла Apache (перед ним загружается mod_remoteip):

# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
RemoteIPHeader X-Forwarded-For

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
person curiouser    schedule 22.08.2014
comment
Работает отлично и думаю, что это приведет меня к полной настройке моих журналов, http://httpd.apache.org/docs/current/mod/mod_log_config.html#formats есть из чего выбрать. - person Taylor Taff; 15.09.2014
comment
Согласно документации для mod_remoteip: крайне важно включить только этот поведение промежуточных хостов (прокси и т. д.), которым доверяет этот сервер, поскольку для удаленного пользовательского агента тривиально выдавать себя за другого пользовательского агента. Вы можете сделать это с помощью директивы RemoteIPInternalProxy. Например: RemoteIPInternalProxy 10.0.2.0/24 - person Johnny Tisdale; 09.06.2021