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

Изменение LogFormat в Apache

Мне нужно изменить LogFormat в Apache, чтобы добавить X-Forwarded-For заголовок и регистрировать реальные IP-адреса клиентов. Я попытался отредактировать это в httpd.conf файл, но затем я нашел две отдельные части для LogFormat. Поэтому я не уверен, дублируются ли они, следует ли мне удалять какие-либо из них или нет, и я не знаю, какие из них редактировать, или мне следует редактировать их все. Мне нужен совет по этому поводу.

Вот первая часть:

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    CustomLog "logs/access_log" common

    <IfModule logio_module>
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

    </IfModule>

</IfModule>

Вторая часть:

<IfModule mod_log_config.c>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent

    CustomLog logs/access_log common

</IfModule>

Я не знаю, в чем разница между первой и второй частью. Я вижу, что две строки дублируются в двух частях. Итак, какую часть мне следует отредактировать? Безопасно ли удалить повторяющиеся строки с одной части и оставить другую? Могу ли я объединить недублированные строки в одну деталь? Спасибо.

Директива IfModule должна принимать конфигурацию, только если модуль был загружен. Чтобы проверить, какие модули загружены, вы можете использовать

  • httpd -M -f path-to-config-file используя Linux
  • и httpd -t -D DUMP_MODULES используя окна

пример

[root@apachesrv bin]# httpd -M -f conf/httpd-vserver.conf
Loaded Modules:
 core_module (static)
 ...
 log_config_module (shared)
 ...
 proxy_http_module (shared)
 schema_module (shared)
Syntax OK

В этом случае вы можете видеть, что я использую log_config_module, поэтому он примет (в моем случае) конфигурацию

<IfModule log_config_module>
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  LogFormat "%h %l %u %t \"%r\" %>s %b" common

  CustomLog "logs/access_log" common

  <IfModule logio_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio    
  </IfModule>    
</IfModule>

Чтобы получить нужную информацию, вам нужно настроить журнал, например:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combinedcustomized

А затем измените свой журнал доступа на:

CustomLog logs/access.log combinedcustomized

РЕДАКТИРОВАТЬ:

В документе apache у вас есть список доступных параметров для регистрации http://httpd.apache.org/docs/2.4/mod/mod_log_config.html

На моем centos 7.4 у меня есть только

<IfModule log_config_module>

директива в httpd.conf, а модуль log_config_module загружается через файл конфигурации /etc/httpd/conf.modules.d/00-base.conf

Я изменил эту строку только для того, чтобы она работала. (но вы измените формат журнала из-за новой строки для IP-адреса клиента)

LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

Есть более "элегантный" способ сделать это (заменив ip прокси на ip клиента, если присутствует поле x-forwarded-for), но я не могу заставить его работать (отображается только ip прокси)

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combied
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/access_log" combined env=!forwarded
CustomLog "logs/access_log" proxy env=forwarded

В соответствии с документы apache оба раздела эквивалентны:

Description:    Logging of the requests made to the server
Status: Base
Module Identifier:  log_config_module
Source File:    mod_log_config.c

Удалите (или закомментируйте) тот, который, по вашему мнению, вы не будете использовать, иначе у вас будут всевозможные головные боли позже, если по какой-то причине вы измените их порядок (следовательно, приоритет).