记录上游请求Nginx反向代理

时间:2013-07-17 13:50:22

标签: logging nginx proxy lua

我已经构建并配置了 Nginx 反向代理服务器。

我的日志记录设置为包含$upstream_http_location和其他各种变量。

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

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

我想知道是否有一种简单的方法可以在不创建lua脚本的情况下记录 Nginx 发出的出站请求,或者如果lua脚本是最好的方法可以解决这个问题有人在我的搜索中提供方向吗?

2 个答案:

答案 0 :(得分:0)

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 is the adress on which socat is listening
        #
        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选项

答案 1 :(得分:-1)

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

如果服务器只监听环回地址,Wireshark将无法帮助(这适用于ASP.NET开发服务器)。在这种情况下,TcpTrace有助于将所有TCP流量从一个端口隧道传输到另一个端口。

(TcpTrace还可以记录所有流量,并且可能就足够了,没有Wireshark)。

由于您未指定操作系统,因此不确定这是否有帮助。