На всю жизнь я не мог заставить mod_remoteip получать IP-адреса клиентов в моих журналах доступа Apache. Я работаю над настройкой Virtualmin с установленным Varnish 4 перед Apache 2.4.7. Как заставить его работать?
Получение журналов доступа Apache 2.4 для отображения IP-адреса клиента вместо 127.0.0.1 с помощью Varnish с использованием mod_remoteip
Ответы (1)
Наконец-то я получил IP-адреса клиентов в журнале и нашел здесь последний шаг:
Вот шаги, чтобы заставить его работать:
Заставьте 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; } }
Теперь включите mod_remoteip в Apache.
Отредактируйте конфигурацию Apache, чтобы сообщить mod_remoteip, какой заголовок содержит IP-адрес клиента (из документов Apache< /а>). Я использую X-Forwarded-For, но я полагаю, что это может быть что угодно, если оно соответствует тому, что вы настроили для передачи Varnish:
RemoteIPHeader X-Forwarded-For
Если вы перезапустите 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
RemoteIPInternalProxy
. Например: RemoteIPInternalProxy 10.0.2.0/24
- person Johnny Tisdale; 09.06.2021