Приложение Flask с Gunicorn на сервере Nginx Ошибка на POST

Я новичок в Python . Я разместил приложение Flask, которое будет принимать запрос POST с Gunicorn на сервере Nginx на экземпляре EC2.

Когда я публикую на маршруте, я получаю сообщение об ошибке:

1578#0: *14 upstream prematurely closed connection while reading response header from upstream, client: myip, server: serverip, request: "POST /train HTTP/1.1", upstream: "http://unix:/home/ec2-user/myproject/myproject.sock:/save_data", host: "serverip"

Запрос POST не из того же домена и всегда будет из другого домена. Нужно ли что-то добавить в мой файл nginx.conf?

Все работает нормально, когда я запускаю приложение с помощью команды python app.py

1 ответ

Решение

Я смог решить эту проблему. Это не было связано с моей конфигурацией NGINX (которую я изначально считал причиной).

Проблема состояла в моем файле конфигурации Gunicorn.

В моем конфигурационном файле Gunicorn (/etc/systemd/system/myproject.service), Я добавил следующее к моему ExecStart линия:

--timeout 600

Файл теперь выглядит так:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=harrison
Group=www-data
WorkingDirectory=/home/harrison/myproject
Environment="PATH=/home/harrison/myproject/myprojectenv/bin"
ExecStart=/home/harrison/myproject/myprojectenv/bin/gunicorn --workers 3 --timeout 600 --bind unix:myproject.sock -m 007 wsgi:application

[Install]
WantedBy=multi-user.target

Кроме того, причина, по которой вы не испытываете проблемы при запуске приложения с помощью python app.py потому что он не обслуживается Gunicorn таким образом... он использует сервер разработки тестов Flask. Сервер разработки не имеет такой же длительности тайм-аута, как Gunicorn. По умолчанию я считаю, что время ожидания Gunicorn по умолчанию составляет 30 секунд. В случае моего заявления это было слишком низко.

Другие вопросы по тегам