Есть ли хороший способ просмотреть подробную версию входящих запросов к apache? Как минимум я хотел бы проверить наличие определенного заголовка и проверить его значение. Запросы поступают не из браузера, поэтому их сложно просмотреть. Я не уверен, что мой собственный HTTP-заголовок действительно добавляется клиентом, поэтому отладка моей директивы rewritecond затруднена.
Вы можете создать собственный LogFormat, содержащий заголовки:
% {Foobar} i: содержимое строки (строк) заголовка Foobar: в запросе, отправленном на сервер. На это влияют изменения, внесенные другими модулями (например, mod_headers). Если вас интересует, каким был заголовок запроса до того, когда большинство модулей изменили бы его, используйте mod_setenvif, чтобы скопировать заголовок во внутреннюю переменную среды и записать это значение с помощью% {VARNAME} e, описанного выше.
Затем повторно используйте это LogFormat в вашей директиве AccessLog
LogFormat "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i " my_special_format
CustomLog logs/access_log_with_details my_special_format
Или даже в одной строке:
CustomLog logs/access_log_with_details "%v %h %l %u %t \"%r\" %>s %b %{MySpecialHeader}i"
ОБНОВИТЬ:
Заметка о SetEnvIf:
Эта часть предназначена для хранения значения заголовка в начале любой внутренней перезаписи, а затем вместо использования %{FOO}i
синтаксис для извлечения заголовка в конце процесса, вы должны использовать %{MyEnvVar}e
это синтаксис для регистрации переменной среды, чтобы записать значение, зарезервированное в начале.
Итак, закончим примерно так:
SetEnvIf MySpecialHeader "(.*)" BACKUPHEADER=$1
(... stuff and things ...)
CustomLog logs/access_log_with_details "init: %{BACKUPHEADER}e final: %{MySpecialHeader}i "
Вы также можете сделать это с помощью mod_security:
http://static.askapache.com/httpd/mod_security/doc/modsecurity-manual.html#N107EE
LogFormat "%h %l %u %t \"%r\" %>s %{mod_security-body}n