如何理解Nginx中的随机500内部错误?

我们的服务器显示了大量的500个内部错误页面随机请求。 我们知道应用程序正在工作,因为我们的代码是unit testing。 服务器设置是Nginx,Unicorn在Ubuntu 10.4 LTS上运行单个Rails应用程序。

据我们所知,请求在传递给Unicorn之前失败了,因为Unicorn的日志文件或我们的Airbrake(我们正在使用的另一个日志logging服务)中没有日志条目,但Nginx的日志文件确实显示了500个状态条目。 服务器正常负载,所以它没有用完内存或任何东西。

Nginx的error.log文件实际上并没有给我们任何有用的东西。 没有build议文件问题或资源问题的条目。

我应该如何继续寻找这个问题?

谢谢

这是我们的网站的nginxconfiguration:

# This is the socket that unicorn listens to upstream unicorn { server unix:/tmp/unicorn.sock; } server { listen 80; client_max_body_size 10m; server_name oursite.com; root /var/www/current/public; access_log /var/log/nginx/access.log; error_page 500 502 503 504 /var/www/shared/500.html; if ($http_user_agent ~* (majestic12|easou|Sogou|baidu|ahrefs) ) { return 403; } location / { # auth_basic "Restricted"; # auth_basic_user_file /var/www/shared/.htpasswd; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_max_temp_file_size 0; if (-f $request_filename) { break; } if (-f $document_root/system/maintenance.html) { rewrite ^(.*)$ /system/maintenance.html last; break; } if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://unicorn; break; } } } 

如果您在rails错误日志中没有任何内容,则可能是HTTP错误503(不可用的后端)或504(后端超时)。 确切的错误和原因将在nginx错误日志中。 这两个错误是因为独angular兽不能提供所有的HTTP请求。

你可以做一些事情:

  • 增加unicorn.rb中的worker_processes
  • 增加nginx.conf中的proxy_read_timeout
  • 添加第二个独angular兽服务器,并通过将其添加到上游独angular兽之间的两个负载平衡