如何调试HTTP 502错误?
我有一个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的配置中添加的东西来帮助调试这个问题?
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地址开启调试。