我对NGINX,GUNICORN和DJANGO设置很陌生。我在nginx和gunicorn之间使用主管。如果没有NGINX,则安装程序可与主管和Gunicorn完美配合,并且可以通过服务器IP看到结果。但是,当我使用nginx服务请求时,会出现错误“上游从上游读取响应标头时过早关闭连接”。请有人帮我吗?
Supervisor command I am using:
sudo /path/to/gunicorn/gunicorn -k gevent --workers 4 --bind unix:/tmp/gunicorn.sock --chdir /path/to/application wsgi:application --timeout 120
下面是我当前正在使用的nginx.conf,它正在按预期方式工作。但我不确定是否符合要求。请调查一下。谢谢。
==============更新=============
upstream xxxx {
server unix:/tmp/gunicorn.sock;
}
server{
listen 80;
listen [::]:80;
server_name xxx.in www.xxx.in;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/xxx.in/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.in/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root path/to/project;
}
location / {
include uwsgi_params;
proxy_pass http://unix:/tmp/gunicorn.sock;
}
}
答案 0 :(得分:0)
请检查以下步骤:
首先,请确保gunicorn正在创建与主管一起运行的.sock
文件。您可以使用
$sudo supervisorctl status <name-of-supervisor-task-for-it>
(check if service is RUNNING)
$ls /tmp
(There should be a gunicorn.sock file existing there)
还请注意您要分配给超级用户配置的用户。在这种情况下,您无需在命令前设置root用户,只需将root用户的特权授予配置文件即可。像这样:
[program:myprogram]
command=/path/to/gunicorn/gunicorn -k gevent --workers 4 --bind unix:/tmp/gunicorn.sock --chdir /path/to/application wsgi:application --timeout 120
<other commands>
user=root
而您的nginx配置应该看起来像这样:
upstream django {
server unix://tmp/gunicorn.sock;
}
server {
listen 80;
server_name <your_app_domain_here>;
location / {
include uwsgi_params;
proxy_pass http://django/;
}