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项目没问题,但部署时出错的问题

无法通过域 URL 访问 Nginx 站点

java工程运行报错 在本地没问题 部署到服务器上就出错

myeclipse部署项目的时候点击add deployment没反应,

真心求助,linux下部署web项目到tomcat中启动没反应

接口测试集成部署(没图说个JB)