如何调试HTTP 502错误?

时间:2010-06-02 23:47:33

标签: python http nginx

我有一个坐在nginx前端后面的Python Tornado服务器。每隔一段时间,但不是每次都会出现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配置中添加一些东西来帮助调试吗?

1 个答案:

答案 0 :(得分:3)

我认为错误日志中的行非常有用。它表示连接被上游拒绝,它包含客户端IP,Nginx服务器配置,请求行,主机名,上游URL和引用。

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

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

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

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

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

events {
  debug_connection 1.2.3.4;
}

仅针对特定客户端IP地址启用调试。