我负责redirect和拆分请求的nginx服务器。 在我们的生产引擎中运行nginx 1.2.1,并在testing机器上运行1.4.1。 configuration是一样的,但在生产环境中,我总是得到一个500 Internal Server Error"但在testing环境中运行正常,我总是检查access.log和Nginx的error.log,但没有什么可担心的。
我怎样才能分析错误,并进一步调查这个错误的原因?
您可以检查您的nginxconfiguration(代理,FCGI …)的外部连接,并检查他们的日志。
你说ngnixredirect和拆分stream量。 交通在哪里? 也许后端(uwsgi?)提供这500个?
请提供更多信息:您使用哪种后端并从中logging。
这是我在诊断错误时使用的nginx清单。
validation你的nginxconfiguration使用
sudo nginx -t
这是一个非常基本的步骤,但应该始终先做。
validationnginx正在运行
sudo service nginx status
validation您的站点configuration中指定的日志文件
find /etc/nginx -name '*.conf' | xargs grep -i log
如果出现500错误,您应该在错误日志中看到与错误相关的条目,这将为您提供错误发生原因的提示。 如果在错误日志中没有看到错误消息,则说明错误日志configuration有问题,您将需要validation错误日志文件上的时间戳以确保正在更新。
首先要问自己:500个响应的发布是什么。 查看响应标题和页面风格将告诉你很多来自哪里。 例如。 响应中是否有X-Powered-By标题? 如果是这样,它不会来自Apache(例如)。
Tomcat的错误页面与Apache相比,看起来与Nginx页面有很大的不同,这就是为什么我要教导人们在工作中给我一个很好的屏幕截图。
此外,如果您看到500个日志,但在错误日志中没有任何内容,那么它很可能来自后端,您应该看看那里。
另外,为什么你的testing和生产nginx版本不同? 在testing中,您没有提及在生产中使用相同的版本。
注意不同版本的软件的默认行为的变化。 我想起了最近几次从2.2迁移到Apache 2.4的时候。
最后,你说后端和testing和产品是一样的(真的,就像在同一个实例中一样),但是这不一定意味着请求将被处理(例如,不同的主机头或SNI服务器名称被传递)
希望这可以帮助您掌握反向代理debugging。
要捕获任何外部请求/错误,您可能会得到一个500错误:您也可以在“事件”菜单中打开chrome:// net-internals页面的同时运行您正尝试访问Chrome浏览器的地址。
在那里你可以分析更多的外部请求/响应(DNS信息,标题发送等)