nginx:logging所有头文件的完整请求/响应?

我们有一个有时会挂起的应用程序服务器。 我们怀疑这是由于客户的要求不好。

nginx可以将完整的请求/响应(如fiddler捕获)logging到文件中,所以我们可以看到挂起之前发送的请求?

(我们可能需要避免pcap和这种方法,并在nginx中完成)

如果nginx不是正确的工具,除了networking分析器以外,可能是什么?

要获取访问者发送的请求主体,请使用client_body_in_file_only on; 并通过将var $request_body_file附加到日志格式来将其写入日志的“临时”文件logging到日志中。 “Temporary”文件将默认位于client_temp目录中。

您也可以logging请求头文件$http_<header>并发送头文件为$sent_http_<header>

如果你有请求正文和标题,你应该能够重播,并得到你的访问者的回应。

还应该高度考虑像gor这样的事情,所以你可以在其他环境重播stream量,你可以让nginx写入这些临时文件,而不会导致生产中的IO问题(nginx不会清除它们的值,这就是为什么它不是“暂时的“ 在这种情况下)。

mitmproxy似乎是正确的工具来做你在问什么。

mitmproxy是一个交互式,具有SSL能力的中间代理,具有控制台界面的HTTP。

mitmdump是mitmproxy的命令行版本。 认为tcpdump的HTTP。

特征

  • 拦截HTTP请求和响应并在运行中修改它们。
  • 保存完整的HTTP会话以供以后重播和分析。
  • 重放HTTP对话的客户端。 重播以前logging的服务器的HTTP响应。
  • 反向代理模式将stream量转发到指定的服务器。
  • 在OSX和Linux上的透明代理模式。
  • 使用Python对HTTPstream量进行脚本化更改。
  • 用于拦截的SSL证书即时生成。

反向代理模式可以让你像Fiddler一样捕获请求和响应。