Наш сервер показывает множество страниц с 500 внутренними ошибками для случайных запросов. Мы знаем, что приложение работает, потому что наш код прошел модульное тестирование. Настройка сервера - это Nginx с Unicorn, на котором запущено одно приложение Rails на Ubuntu 10.4 LTS.
Насколько мы можем сказать, запросы терпят неудачу до того, как они будут переданы Unicorn, потому что нет записей журнала в файле журнала Unicorn или в нашем Airbrake (другой сервис ведения журнала, который мы используем), но файл журнала Nginx показывает 500 записей статуса. Сервер находится под нормальной нагрузкой, поэтому ему не хватает оперативной памяти или чего-то еще.
Файл error.log Nginx на самом деле не дает нам ничего полезного. Нет записей, которые предполагают проблемы с файлами или ресурсами.
Как мне продолжить поиск проблемы?
Спасибо
Вот наша конфигурация 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. Обе ошибки вызваны тем, что единорог не может обслуживать все HTTP-запросы.
Вы можете сделать несколько вещей: