Внутренняя ошибка сервера nginx uwsgi 500 - заголовок http uwsgi: "Соединение: закрыть"
Я использую небольшой сервер с nginx и приложением python flask на aws и uwsgi. Уже дважды случалось так, что сервер вышел из строя с ошибкой 500 и без логов от имени nginx. Я не эксперт, не могли бы вы помочь выяснить, почему происходит следующее?
похоже, что сервер "случайно" (?) останавливается с этой ошибкой:
(я активировал debug
в error_log /pathtomylog/error.log debug
в файле nginx.conf, чтобы увидеть его):
2015/12/02 22:05:12 [debug] 19006#0: *1 http upstream process header
2015/12/02 22:05:12 [debug] 19006#0: *1 malloc: 0000000001D24CE0:4096
2015/12/02 22:05:12 [debug] 19006#0: *1 recv: fd:11 104 of 4096
2015/12/02 22:05:12 [debug] 19006#0: *1 http uwsgi status 500 "500 Internal Serv
er Error"
2015/12/02 22:05:12 [debug] 19006#0: *1 http uwsgi header: "Connection: close"
2015/12/02 22:05:12 [debug] 19006#0: *1 http uwsgi header: "Content-Type: text/p
lain"
2015/12/02 22:05:12 [debug] 19006#0: *1 http uwsgi header done
2015/12/02 22:05:12 [debug] 19006#0: *1 xslt filter header
2015/12/02 22:05:12 [debug] 19006#0: *1 HTTP/1.1 500 Internal Server Error
Я пытался убить всех работников uswgi. Я попытался перезапустить nginx. Оперативная память выглядит по-прежнему нормально и деактивирована подкачка ради ElasticSearch (да, я использую ее на 1 Гб оперативной памяти, но на размер моего индекса она еще не жаловалась).
Не могли бы вы также указать ссылку на то, как настроить будильник или что-то? Так как ошибка произошла дважды, без изменения в conf-файлах ни приложения, ни статических файлов, все в порядке, конечной точки API нет, я думал, что это связано с uswgi, но не могу понять.
Я не эксперт в конфигурации серверов, и это действительно полный мир технических деталей! Пожалуйста, помогите в районе в джунглях:)
1 ответ
[ Решено ] uswgi не удалось разрешить на модуле python.
Я сделал следующее и обнаружил ошибку, она может быть полезна кому-то еще для отладки.
Проверил журнал uswgi: если у вас его нет, установите его в файле.ini, где указывает uwsgi запустить ваше приложение:
logto = /var/log/uwsgi/%n.log
(Я обращаюсь к этому руководству, если вы новичок: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04)
Затем найдите файл журнала в указанной выше папке и:
tail -f myapp.log
Я обнаружил, что приложение Python не было найдено. Немного почесав голову, я обнаружил, что ошибка не в заголовке, а просто потому, что я назвал резервный модуль моего приложения в виде [name.version.py] ( основная вещь, которую нельзя делать при именовании модулей Python.. упс я это сделал).
Так что он не знал, какой модуль запустить.
Например, переименованная резервная копия: mv oldname.version.py newname_version.py
и снова работает.
Тем не менее, поскольку я загружал файлы резервных копий на серверы, пока приложение работало правильно, и продолжал работать до двух дней назад, я понимаю, что сервер вышел из строя и перезапустился, а затем не смог определить, какой из модулей решил: как отслеживать перезапуск сервера? это нормально? Как вы понимаете, я хочу настроить прилично, несмотря на то, что настройки сервера - не мое дело, и комментарии для более ясного понимания того, как предотвратить или обработать ошибку 500 (установка аварийных сигналов), очень ценятся!