Подтвердить что ты не робот

Возможно ли зарегистрировать все заголовки 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

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

4b9b3361

Ответ 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" и т.д.