Приложение 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 секунд. В случае моего заявления это было слишком низко.