记录上游请求 Nginx 反向代理。

我已经构建和配置了一个_Nginx_反向代理服务器。

我已经将日志设置为包括$upstream_http_location和其他各种变量。

我代理的服务器不返回位置头,这意味着我的$upstream_http_location不返回任何内容。

我想记录我的上游请求,以便我能够在日志中看到我向上游服务器发出的请求。

我想知道是否有一种简单的方法记录_Nginx_发出的出站请求,而不需要创建lua脚本,或者如果lua脚本是解决此问题的最佳方式,是否有人可以指导我搜索?

点赞
用户33080
用户33080

在 Windows 上,我目前发现使用 Wireshark 是最好的方法,它可以捕获接口上的所有流量。

如果服务器仅监听回环地址,Wireshark 就不起作用(这适用于 ASP.NET 开发服务器)。在这种情况下,TcpTrace 可以通过将一个端口的所有 TCP 流量隧道到另一个端口来提供帮助。

(TcpTrace 还可以记录所有流量,可能可以单独使用,不需要 Wireshark)。

不确定这是否有帮助,因为您没有指定操作系统。

2013-07-22 16:41:23
用户9552619
用户9552619

5年后我遇到了同样的问题。

如果nginx不能解决,我建议使用mitmproxy,但由于nginx无法处理出站代理,所以我必须使用另一个隧道二进制文件来解决它。

我使用了socat,但我认为stunnel也可以。以下是我的nginx配置示例

proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host-Real-IP  $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-Pcol http;

        proxy_intercept_errors on;
        proxy_pass https://127.0.0.1:9090/;
        #127.0.0.1:9090是socat监听的地址
        #
        proxy_set_header Host [remote_host];
        proxy_redirect https://[remote_host]/ https://[nginx_hostname]/;

以下是我的socat脚本,该脚本必须在我的nginx服务器上运行。

proxy=mitmproxy_address
proxyport=mitmproxy_port
forwarded_ip=your_server_address
forwarded_port=your_server_address_port

socat TCP4-LISTEN:9090,reuseaddr,fork PROXY:$proxy:$forwarded_ip:$forwarded_port,proxyport=$proxyport

至于mitmproxy,您应该看一下教程以了解其工作原理。您可以从以下内容开始:

mitmproxy -p 8888

如果您的服务器是自签名的,可以使用--insecure选项。

2018-12-11 14:50:34