2010-11-25 7 views
7

Мы используем nginx в качестве обратного прокси для управления и регистрации доступа к веб-сервису Clojure (Java).nginx: Можно ли захватить заголовки ответов в журнале доступа при использовании nginx в качестве обратного прокси?

Мы можем сгенерировать access_log и захватить входящие заголовки, используя nginx просто отлично. Наше приложение Clojure регистрирует активность через log4j. Проблема заключается в том, что мы не можем сопоставить запись в access_log с записью, созданной приложением.

Приложение отвечает на доступ, отправляя заголовки ответов, а также тело. Мы можем свободно изменять эти заголовки ответов. Моя первоначальная мысль заключалась в том, чтобы сгенерировать UUID, который соответствует каждому запросу веб-службы и отправить его обратно пользователю в заголовке ответа X-Uuid. Моя мысль была, что я мог бы захватить этот ответ путем создания пользовательского log_format:

log_format lt-custom '$remote_addr - $remote_user [$time_local] ' 
        '"$request" $status $body_bytes_sent ' 
        '"$http_referer" "$http_user_agent" $request_time $http_x_uuid'; 

Это выглядит как Nginx может захватить заголовки во входящих запросах, но не исходящие ответы (я проверил это, заменив $http_x_uuid с $http_content_type).

Итак! Есть ли способ связать мои access_log и мои записи log4j, захватывая исходящие заголовки ответов, используя nginx? Есть ли способ лучше? Я бы предпочел не полагаться на пользователей, генерирующих свои собственные UUID.

Большое спасибо!

ответ