nginx:如何从nginx(不是我的应用程序)中随机找到500。可能与负载有关?


9

最近,我们从nginx本身获取了大约500个,但没有以某种方式记录下来(我们有屏幕截图,但是记录中什么也没有)。这本身就是很奇怪的,因为通常在那里会出现错误。无论如何,我想知道是否存在连接池大小之类的东西,如果超出限制,将导致500?我们已将其与最近的流量激增相关联,但这不是结论性的。

任何人都对如何开始解决此类问题有任何想法?


您需要做的前两件事是重现此错误,并找出Nginx不登录的原因error_log。同时发布您的配置文件。
量子

Answers:


6

我们在nginx和lmon中使用日志格式的组合来捕获这样的事情。NGINX日志格式,例如:

log_format main'$ status:$ request_time:$ upstream_response_time:$ pipe:$ body_bytes_sent $ connection $ remote_addr $ host $ remote_user [$ time_local]“ $ request”“ $ http_referer”“ $ http_user_agent”“ $ http_x_forwarded_for” $ upstream_addr in:$ http_cookie“'

将捕获很多有用的诊断信息,例如处理请求的上游服务器,以及将状态置于最前面,因此即使日志快速滚动也很容易阅读。

我们使用LMON来查看这些日志,然后在日志中发现错误(例如500s,503s,400s)时提醒我们(寻呼机/电子邮件):

http://www.bsdconsulting.no/tools/lmon-README

这可以帮助您在发生问题时得到警报,这是最简单的调试时间。

如果还没有考虑的话,您可能应该考虑的另一件事是,默认情况下,nginx认为500是致命条件,因此不会尝试其他上游操作。如果您有多个上游,则可以将其配置为使用500个时使用另一个上游,希望可以消除用户的失败:

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream


这是一个非常有用的答案,谢谢!转到implemenet proxy_next_upstream ...
kaleidomedallion,2011年

4

error_log $filename debug; 将打开调试级别日志记录到错误日志中-这将在错误发生时为您提供nginx内部状态的很多详细信息,如果使用--with-debug编译(默认情况下,一些发行版会这样做)会付出更多。

请注意,“调试”级别确实确实会产生大量输出,以至于您可能希望监视磁盘空间...


1

在我的情况下,conf文件的命名不正确(是example.com而不是example.com.conf),并且不包含在内。不知何故,这不会导致“欢迎使用nginx”,但会导致未记录的HTTP 500错误。好吧,它实际上是被记录下来的,但是在另一个虚拟主机的错误文件中,该虚拟主机无法使用该特定URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.