2012-03-30 2 views
34

Как сделать запись в лог-файл содержимым заголовка HTTP-запроса (все), полученного apache?Возможно ли зарегистрировать все заголовки HTTP-запросов с помощью 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

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

ответ

10

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

А вот список всех апача-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

Это по-прежнему полезно, чтобы иметь возможность регистрировать все HTTP-заголовки, переданные на машину apache. Я бы предпочел иметь более гибкую систему, чем редактировать «LogFormat» каждый раз, когда вводится новый заголовок. –

+1

Я намеренно вошел в систему, чтобы проголосовать за этот ответ! – rofans91

40

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> 
+11

Спасибо, это правильный ответ. Вот как это установить в httpd.conf. (Тьфу, нет перевода строки комментариев ??) 'LoadModule log_forensic_module/USR/lib64/HTTPD/модули/mod_log_forensic.so' ' ForensicLog/вар/Журнал/HTTPD/forensic_log ' Теперь вы можете установите флажок [Shellshock] (http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html): «grep»() {«/ var/log/HTTPD/forensic_log' – Raptor007

5

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

например. запустить команду оболочки «окр>/TMP/заголовков» из вашего сценария

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

Смежные вопросы