Можно ли зарегистрировать все заголовки HTTP-запросов с помощью Apache? - PullRequest
40 голосов
/ 30 марта 2012

Как сделать запись в лог-файл содержимого заголовка 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

но это не логично, и невозможно узнать, какие заголовки будут.

Ответы [ 3 ]

60 голосов
/ 10 сентября 2014

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> 
13 голосов
/ 30 марта 2012

Вот список всех http-заголовков: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

А вот список всех apache-log-форматов: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats

Как вы правильно написали, коддля регистрации конкретного заголовка используется% {foobar} i, где foobar - имя заголовка.Таким образом, единственным решением является создание определенной строки формата.Если вы ожидаете нестандартный заголовок, такой как x-my-nonstandard-header, тогда используйте %{x-my-nonstandard-header}i.Если ваш сервер собирается игнорировать этот нестандартный заголовок, почему вы хотите записать его в свой лог-файл?Неизвестный заголовок абсолютно не влияет на вашу систему.

6 голосов
/ 04 февраля 2015

Если вам интересно узнать, какие конкретные заголовки отправляет удаленный клиент на ваш сервер, и вы можете заставить запрос запустить сценарий CGI, то простейшее решение состоит в том, чтобы ваш серверный сценарий сбрасывал переменные среды вфайл где-то.

например, запустите команду оболочки "env> / tmp / headers" из вашего скрипта

Затем найдите переменные среды, которые начинаются с 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» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...