私たちのサーバーは、ランダムなリクエストに対して500の内部エラーページをたくさん表示しています。コードは単体テストされているため、アプリが機能していることがわかります。サーバーのセットアップはNginxで、UnicornがUbuntu 10.4LTSで単一のRailsアプリを実行しています。
UnicornのログファイルまたはAirbrake(使用している別のログサービス)にログエントリがないため、リクエストがUnicornに渡される前に失敗したことがわかる限り、Nginxのログファイルには500のステータスエントリが表示されます。サーバーは通常の負荷がかかっているため、RAMなどが不足していません。
Nginxのerror.logファイルは、実際には何も役に立ちません。ファイルの問題やリソースの問題を示唆するエントリはありません。
問題を見つけるにはどうすればよいですか?
ありがとう
これがサイトのnginx設定です:
# 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エラーログにあります。両方のエラーはUnicornはすべてのHTTPリクエストを処理できるわけではないためです。
あなたはいくつかのことをすることができます: