我有一个使用Django 2.1,DRF,Gunicorn,Nginx和Tensorflow制作的API。我正在具有Ubuntu 18.04 x64和1 GB内存的Droplet上运行它。
已配置API,使其仅允许POST
方法调用该API。发送请求时,API将需要一个zip文件并响应一个字符串。
当我第一次在本地计算机上使用它时,没有发生任何问题。但是,当我将其移到云中并使用nginx
和gunicorn
来提供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.log
或INFO
),'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
输出一条错误,提示它需要该前缀。>
已经有一个星期左右了,我还没有找到解决这个问题的方法。
有人对此有任何想法吗?预先感谢。
以下是nginx
和gunicorn
的文件
/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