nginx:使用nginx作为反向代理时,是否可以捕获访问日志中的响应头?

我们使用nginx作为反向代理来控制和logging对Clojure(Java)Web服务应用程序的访问。

我们可以生成一个access_log并使用nginx捕获传入的头文件。 我们的Clojure应用程序通过log4jlogging活动。 麻烦的是,我们无法将access_log中的条目与应用程序生成的条目进行匹配。

应用程序通过发送响应标题以及正文来响应访问。 我们可以自由地更改这些响应头。 我最初的想法是生成一个对应于每个Web服务请求的UUID,并在回复标题X-Uuid中将其发回给用户。 我的想法是,我可以通过创build一个自定义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_uuidreplace$http_x_uuidvalidation这$http_content_type )。

所以! 有没有一种方法可以绑定我的access_log内容和我的log4j条目通过使用nginx捕获传出回复标题? 有没有更好的办法? 我宁愿不必依靠用户生成自己的UUID。

非常感谢!

$ http_x_uuid是客户端发送的头文件。 上游发送的响应头是$ upstream_http_x_uuid

http://wiki.nginx.org/HttpUpstreammodulee#.24upstream_http_.24HEADER