Django + Nginx + Gunicorn:[错误] 2194#2194:* 15上游过早关闭连接,同时从上游读取响应标头

时间:2018-10-12 18:31:59

标签: django nginx django-rest-framework gunicorn

我有一个使用Django 2.1,DRF,Gunicorn,Nginx和Tensorflow制作的API。我正在具有Ubuntu 18.04 x64和1 GB内存的Droplet上运行它。

已配置API,使其仅允许POST方法调用该API。发送请求时,API将需要一个zip文件并响应一个字符串。

当我第一次在本地计算机上使用它时,没有发生任何问题。但是,当我将其移到云中并使用nginxgunicorn来提供API时,我从nginx的{​​{1}}

中收到以下错误
error.log

在研究了有关此错误的许多问题之后,我决定将以下日志记录包含在django应用程序的[error] 1186#1186: *9 upstream prematurely closed connection while reading response header from upstream, client: CLIENT_IP_ADDRESS, server: HOST_IP_ADDRESS, request: "POST /api/beta/some-app/ HTTP/1.1", upstream: "http://unix:/home/user-name/django-api/django.sock:/api/beta/some-app/", host: "HOST_IP_ADDRESS".

settings.py

LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {message}', 'style': '{', }, }, 'handlers': { 'fileDebug': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': "/var/log/debug_django.log", }, 'fileError': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': "/var/log/debug_django.log", }, 'fileCritical': { 'level': 'CRITICAL', 'class': 'logging.FileHandler', 'filename': "/var/log/debug_django.log", }, }, 'loggers': { 'django': { 'handlers': ['fileDebug'], 'level': 'DEBUG', 'propagate': True, }, 'django': { 'handlers': ['fileError'], 'level': 'ERROR', 'propagate': True, }, 'django': { 'handlers': ['fileCritical'], 'level': 'CRITICAL', 'propagate': True, }, }, } 应用程序的错误日志的文件名位于django中。 /var/log/debug_django.log的错误日志的错误日志也与gunicorn在同一目录中。

在尝试发送相同的/var/log/gunicorn_error.log请求之后,我仍然收到来自POST的相同错误。但是,nginx没有输出任何错误(实际上,它没有输出任何信息,例如debug_django.logINFO),'gunicorn_error.log'也没有输出错误 当我运行DEBUG

sudo tail -F /var/log/gunicorn_error.log输出

sudo tail -F /var/log/gunicorn_error.log

我不确定。后端发生了什么(或[2018-10-12 17:46:33 +0000] [1282] [INFO] Using worker: sync [2018-10-12 17:46:33 +0000] [1299] [INFO] Booting worker with pid: 1299 [2018-10-12 17:46:33 +0000] [1300] [INFO] Booting worker with pid: 1300 [2018-10-12 17:46:33 +0000] [1302] [INFO] Booting worker with pid: 1302 [2018-10-12 17:47:09 +0000] [1315] [INFO] Booting worker with pid: 1315 [2018-10-12 17:57:40 +0000] [1406] [INFO] Booting worker with pid: 1406 中的upstream)。 Stackoverflow的一些情况是超时错误或文件太大。但是根据日志,nginx并没有遇到这种情况。我曾尝试从nginx gunicorn(称为http://)文件中删除site-enabled,但这只是使django输出一条错误,提示它需要该前缀。

已经有一个星期左右了,我还没有找到解决这个问题的方法。

有人对此有任何想法吗?预先感谢。

以下是nginxgunicorn的文件

/etc/systemd/system/gunicorn.service

nginx

/ etc / nginx / sites-enabled / django

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=user-name
Group=www-data
WorkingDirectory=/home/user-name/django-api
ExecStart=/home/user-name/myproject/myprojectenv/bin/gunicorn --access-logfile gunicorn_access.log --error-logfile /var/log/gunicorn_error.log --log --workers 3 --bind unix:/home/user-name/django-api/django.sock DjangoAPI.wsgi:application

[Install]
WantedBy=multi-user.target

0 个答案:

没有答案