nginx:转储 HTTP 请求以进行调试

Ale*_*ysh 18 ubuntu http nginx

  • Ubuntu 10.04.2
  • nginx 0.7.65

我看到一些奇怪的 HTTP 请求来到我的 nginx 服务器。

为了更好地了解发生了什么,我想转储此类查询的整个 HTTP 请求数据。(即,将所有请求标头和正文转储到我可以阅读的地方。)

我可以用 nginx 做到这一点吗?或者,是否有一些 HTTP 服务器允许我开箱即用,我可以通过 nginx 代理这些请求?

更新:请注意,此框有大量正常流量,我想避免在低级别(例如,使用tcpdump)捕获所有流量并稍后将其过滤掉。

我认为首先在重写规则中过滤良好的流量会容易得多(幸运的是,在这种情况下我可以很容易地编写一个),然后只处理虚假流量。

而且我不想将虚假流量引导到另一个盒子,只是为了能够在那里使用tcpdump.

更新 2:为了提供更多详细信息,虚假请求foo在其 GET 查询中具有命名(例如)参数(参数的值可能不同)。好的请求保证永远不会有这个参数。

如果我可以通过它tcpdumpngrep以某种方式过滤- 没问题,我会使用这些。

oo.*_*oo. 32

根据需要调整前/后行(-B 和 -A 参数)的数量:

tcpdump -n -S -s 0 -A 'tcp dst port 80' | grep -B3 -A10 "GET /url"
Run Code Online (Sandbox Code Playgroud)

这使您可以在框中获得所需的 HTTP 请求,而无需生成必须在其他地方卸载的巨大 PCAP 文件。

请记住,BPF 过滤器从来都不是精确的,如果有大量数据包流过任何一个盒子,BPF 可以并且将会丢弃数据包。


cor*_*ump 5

我不知道转储请求的确切含义,但您可以使用 tcpdump 和/或wireshark来分析数据:

# tcpdump port 80 -s 0 -w capture.cap
Run Code Online (Sandbox Code Playgroud)

并且您可以使用wireshark打开文件并查看服务器之间的对话。