Nginx 1.2.1:如何分析500内部服务器错误

我负责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清单。

  1. validation你的nginxconfiguration使用

     sudo nginx -t 

    这是一个非常基本的步骤,但应该始终先做。

  2. validationnginx正在运行

     sudo service nginx status 
  3. validation您的站点configuration中指定的日志文件

     find /etc/nginx -name '*.conf' | xargs grep -i log 
  4. 如果出现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信息,标题发送等)