Получаване на регистрационни файлове за достъп на 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 docs). Използвам 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