Django-Gunicorn-Nginx 部署没有通过 Nginx
Posted
技术标签:
【中文标题】Django-Gunicorn-Nginx 部署没有通过 Nginx【英文标题】:Django-Gunicorn-Nginx deployement doesn't get past Nginx 【发布时间】:2018-01-28 00:43:10 【问题描述】:我正在尝试在 EC2 实例上部署项目。
当我转到我的 EC2 实例 URL 时,我可以看到 nginx 欢迎消息,但我似乎无法将其滚动到 django 中。
我有一个 Gunicorn 服务和 Nginx 服务,这些是他们service status
调用的输出:
独角兽:
● gunicorn_mynew_website.service - mynew 网站的 Gunicorn 守护程序 已加载:已加载(/etc/systemd/system/gunicorn_mynew_website.service; 启用;供应商预设:启用)活动:自星期六以来活动(运行) 2017-08-19 12:29:05 UTC; 2s 前 主 PID:1760(gunicorn) 任务:2 内存:33.6M CPU:368 毫秒 CGroup:/system.slice/gunicorn_mynew_website.service ├─1760 /opt/mynew/venv/website-venv/bin/python3.5 /opt/mynew/venv/website-venv/bin/gunicorn website.wsgi:application --name 网站 --workers 1 --user ubuntu --bind=unix:/opt/mynew/run/gunicor └─1769 /opt/mynew/venv/website-venv/bin/python3.5 /opt/mynew/venv/website-venv/bin/gunicorn website.wsgi:application --name 网站 --workers 1 --user ubuntu --bind=unix:/opt/mynew/run/gunicor
8 月 19 日 12:29:05 ip-172-31-26-24 systemd[1]:启动 Gunicorn 守护进程 对于我的新网站。 8 月 19 日 12:29:05 ip-172-31-26-24 gunicorn_start.sh[1760]:以 ubuntu 启动网站 8 月 19 日 12:29:05 ip-172-31-26-24 gunicorn_start.sh[1760]:[2017-08-19 12:29:05 +0000] [1760] [INFO] 开始 gunicorn 19.7.1 Aug 19 12:29:05 ip-172-31-26-24 gunicorn_start.sh [1760]:[2017-08-19 12:29:05 +0000] [1760] [信息] 收听:unix:/opt/mynew/run/gunicorn.sock (1760) 8 月 19 日 12:29:05 ip-172-31-26-24 gunicorn_start.sh[1760]:[2017-08-19 12:29:05 +0000] [1760] [INFO] 使用工作人员:同步 8 月 19 日 12:29:05 ip-172-31-26-24 gunicorn_start.sh [1760]:[2017-08-19 12:29:05 +0000] [1769] [信息] 使用 pid 引导工作人员:1769
Nginx
● nginx.service - 高性能 Web 服务器和反向代理 服务器加载:加载(/lib/systemd/system/nginx.service;启用; 供应商预设:启用)活动:自星期六以来活动(运行) 2017-08-19 11:34:14 UTC; 56分钟前进程:1151 ExecStart=/usr/sbin/nginx -g 守护进程开启; master_process 开启; (代码=退出,状态=0/成功)进程:1090 ExecStartPre=/usr/sbin/nginx -t -q -g 守护进程开启; master_process 开启; (code=exited, status=0/SUCCESS) 主 PID: 1165 (nginx) 任务:2 内存:9.6M CPU:24ms CGroup:/system.slice/nginx.service ├─1165 nginx:主进程/usr/sbin/nginx -g daemon on; master_process 开启 └─1166 nginx:工作进程
8 月 19 日 11:34:14 ip-172-31-26-24 systemd[1]:开始高 性能 Web 服务器和反向代理服务器... 8 月 19 日 11:34:14 ip-172-31-26-24 systemd[1]:已启动高性能 Web 服务器和 反向代理服务器。
而我的`/etc/nginx/nginx.conf(Http部分)是:
http
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
upstream test_server
server unix:/opt/mynew/run/gunicorn.sock fail_timeout=10s;
server
listen 80;
client_max_body_size 4G;
access_log /opt/mynew/logs/nginx-access.log;
error_log /opt/mynew/logs/nginx-error.log warn;
location /static/
autoindex on;
alias /opt/mynew/website/static/;
location /
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename)
proxy_pass http://test_server;
break;
我的gunicorn_start.sh
文件(服务):
#!/bin/bash
NAME="website"
DJANGODIR=/opt/mynew/website
SOCKFILE=/opt/mynew/run/gunicorn.sock
USER=ubuntu
GROUP=www-data
NUM_WORKERS=1
DJANGO_SETTINGS_MODULE=website.settings
DJANGO_WSGI_MODULE=website.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /opt/mynew/venv/website-venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /opt/mynew/venv/website-venv/bin/gunicorn $DJANGO_WSGI_MODULE:application \
--name $NAME \
--workers $NUM_WORKERS \
--user $USER \
--bind=unix:$SOCKFILE
我的 django 文件夹位于 /opt/mynew/website/
为了了解发生了什么,我故意向 /website/website/settings.py
添加了异常,只是为了查看 gunicorn 是否连接到它,当我启动 gunicorn 服务时它确实失败了
所以我猜是 Nginx 和 gunicorn 之间的错...
有什么建议吗?
【问题讨论】:
去掉这2个include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
,看看能不能用
@TarunLalwani,您的先生,是救生员。如果您可以发布一个答案,同时解释出了什么问题以及为什么要修复它 - 我无法更快地接受并投票支持它
【参考方案1】:
去掉这2个
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
看看它是否有效。默认情况下,nginx 带有一个default.conf
,它将侦听端口80
,并使用静态 nginx 页面为/var/www/html
目录提供服务。所以要么知道你包含的每个文件,要么不包含它们
【讨论】:
谢谢,如果可以的话,现在当我从 django 路由任何具有r'^sometext/'
的东西时,一切正常,但是当我路由 r'^'
时,它返回到 Nginx 欢迎页面,那是什么意思?跨度>
在你的 location /
块中添加另一个指令 try_files $uri $uri/ =404;
看看是否有帮助以上是关于Django-Gunicorn-Nginx 部署没有通过 Nginx的主要内容,如果未能解决你的问题,请参考以下文章
解决IDEA Java Web项目没问题,但部署时出错的问题
myeclipse部署项目的时候点击add deployment没反应,