Возможно ли зарегистрировать все заголовки HTTP-запросов с помощью Apache?
Как сделать запись в лог файл содержимым заголовка HTTP-запроса (все), полученного apache?
В настоящее время моя конфигурация формата журнала в формате apache:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined
Я понимаю, что это можно сделать так:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined
но это не логично, и невозможно узнать, какие заголовки будут.
Ответы
Ответ 1
mod_log_forensic - это то, что вы хотите, но оно не может быть включено/доступно при установке Apache по умолчанию.
Вот как его использовать.
LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so
<IfModule log_forensic_module>
ForensicLog /var/log/httpd/forensic_log
</IfModule>
Ответ 2
Вот список всех http-заголовков: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
И вот список всех apache-logformats: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats
Как вы правильно писали, код для ведения журнала определенного заголовка - это% {foobar} i, где foobar - это имя заголовка. Таким образом, единственным решением является создание определенной строки формата. Когда вы ожидаете нестандартного заголовка, такого как x-my-notstandard-header, используйте %{x-my-nonstandard-header}i
. Если ваш сервер будет игнорировать этот нестандартный заголовок, почему вы хотите записать его в свой файл журнала? Неизвестный заголовок абсолютно не влияет на вашу систему.
Ответ 3
Если вам интересно узнать, какие конкретные заголовки отправляет удаленный клиент на ваш сервер, и вы можете заставить запрос запускать CGI script, то самым простым решением будет ваш сервер script сбрасывать переменные среды в файл где-то.
например. запустите команду оболочки "env > /tmp/headers" из вашего script
Затем найдите переменные среды, которые начинаются с HTTP _...
Вы увидите строки типа:
HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_CACHE_CONTROL=max-age=0
Каждый из них представляет заголовок запроса.
Обратите внимание, что имена заголовков изменены из фактического запроса. Например, "Accept-Language" становится "HTTP_ACCEPT_LANGUAGE" и т.д.