我该如何调试HTTP 502错误?

3

我有一个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错误缓冲区时,会出现这种结果。 - ppostma1
1个回答

3

在我看来,错误日志中的这行信息非常有用。它表示上游服务器拒绝了连接,并包含客户端IP、Nginx服务器配置、请求行、主机名、上游URL和引荐者。

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

如果你想查看Nginx如何处理请求,为什么选择特定的服务器和位置部分——可以使用美丽的“调试”模式。(注意,你的Nginx二进制文件必须包含调试符号)。然后:

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

此命令会为所有请求打开调试功能。错误日志中的调试信息需要一些时间才能理解,但这些努力是值得的。

不要在高流量网站上直接使用此命令!它会产生大量信息,使您的错误日志增长非常快。如果您需要在生产环境下调试请求,请使用debug_connection指令:

events {
  debug_connection 1.2.3.4;
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接