【问题标题】:Log upstream requests Nginx reverse proxy记录上游请求 Nginx 反向代理
【发布时间】:2013-07-16 02:43:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • HTTP 响应标头中的“位置”字段?此字段通常表示应重定向到的新 url。如果不是 301 或 302,则该字段不应该具有价值。你试过 $upstream_address 吗?

标签: logging nginx proxy lua


【解决方案1】:

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

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

(TcpTrace 也可以记录所有流量,并且可能单独使用就足够了,无需 Wireshark)。

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

【讨论】:

    【解决方案2】:

    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 选项

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2013-06-04
      • 2021-11-09
      • 2017-02-27
      相关资源
      最近更新 更多