【问题标题】:How do I debug a HTTP 502 error?如何调试 HTTP 502 错误?
【发布时间】:2021-02-02 14:35:57
【问题描述】:

我有一个 Python Tornado 服务器位于 nginx 前端后面。时不时地,但不是每次,我都会收到 502 错误。我查看了 nginx 访问日志,我看到了这个:

127.0.0.1 - - [02/Jun/2010:18:04:02 -0400] "POST /a/question/updates HTTP/1.1" 502 173 "http://localhost/tagged/python" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"

并在错误日志中:

2010/06/02 18:04:02 [error] 14033#0: *1700 connect() failed (111: Connection refused)
while connecting to upstream, client: 127.0.0.1, server: _,
request: "POST /a/question/updates HTTP/1.1",
upstream: "http://127.0.0.1:8888/a/question/updates", host: "localhost", referrer: "http://localhost/tagged/python"

认为 Tornado 日志中不会出现任何错误。你将如何调试这个?我可以在 Tornado 或 nginx 配置中添加一些东西来帮助调试吗?

【问题讨论】:

  • 大多数人会发现,这是 nginx 无法验证上游标头(带有内容的 201)时的结果,或者记录了太多错误(通知)以致破坏了 4k 错误缓冲区。

标签: python http nginx


【解决方案1】:

在我看来,错误日志中的那一行信息量很大。它表示连接被上游拒绝,它包含客户端 IP、Nginx 服务器配置、请求行、主机名、上游 URL 和引用者。

很明显,您必须查看上游(或防火墙)才能找出原因。

如果您想了解 Nginx 如何处理请求,为什么它选择特定的服务器和位置部分 - 有一个漂亮的“调试”模式。 (注意,您的 Nginx 二进制文件必须包含调试符号)。那么:

error_log  /path/to/your/error.log debug;

将为所有请求打开调试。错误日志中的调试信息需要一些时间来习惯解释它,但值得付出努力。

不要将这个“原样”用于高流量网站!它会生成大量信息,并且您的错误日志会增长得非常快。如果需要在生产中调试请求,请使用debug_connection 指令:

events {
  debug_connection 1.2.3.4;
}

它只为特定的客户端 IP 地址打开调试。

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2017-06-29
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多