django_gunicorn配置

󰃭 2017-06-22

第一句话就是吐槽!网上百度的纯粹尼玛一堆狗屎!超级不适合新手!这里我来给各位新手讲解如何把django部署到nginx+gunicorn! 环境:云服务器ubuntu16.04系统。django版本1.10.6。 首先讲解原理:浏览器输入你的网址后回车后,nginx第一步收到请求,如果访问的是静态资源,比如html,png,css,js等nginx直接处理了。如果是动态请求就是第二步把这个动态请求转发给gunicorn来处理了。他俩分工一静一动,这样的好处我不用多说了。就他么个这意思网上的教程就磨磨唧唧一大堆。 他们的原理和过程是这样的,那么问题来了,怎样把他们结合在一起? 首先你要知道 如果没有nginx,光有gunicorn是可以直接运行django项目的。 比如 $ gunicron 你的项目名,再比如 $ gunicorn -w 1 -b IP:端口项目名.wsgi 就可以运行。 其次如果配置是这样的,我的nginx路径是 : /etc/nginx/ , 配置/etc/nginx/sites-enabled/default。 你也许会看到网上说要么编辑nginx.conf 要么新建一个配置文件。 我没有那么做我就一个项目所以直接更改nginx的默认配置。

记得用 sudo vim /etc/nginx/sites-enabled/default

把原有的注释掉改成这样

server {

       listen 80; 

       server_name example.org; # 这是HOST机器的外部域名,用地址也行 
       root /home/ubuntu/....    #这里填你的项目根目录
       location / { 

       proxy_pass http://127.0.0.1:8080; # 这里是指向 gunicorn host 的服务地址址          proxy_set_header Host $host; proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for; 

        } 

       location /static {

        alias /home/ubuntu/项目名/static/; # 在你项目根目录建一个存放静态资源的文件夹供nginx访问。

       }

}

注意:1.我的缩进格式不对,请你注意。

 2.proxy_pass 和 一会gunicorn启动时用的IP地址和端口必须一致,因为nginx收到动态请求要通过这个地址转发给gunicorn。

 3. 重启nginx服务:sudo service nginx restart

如果你现在就从浏览器输入你的地址访问的话 应该是502 bad gateway ,因为你得接着启动的你gunicorn才可以。

gunicorn -w 1(这里填你的服务器cpu核数) -b 127.0.0.1:8080 你的项目名.wsgi

启动成功浏览器里再访问,应该就会成功了。

目前, nginx+gunicorn结合成功。

还需做些事情,因为刚才在nginx里指定了nginx访问的静态资源的位置,可实际django项目中的静态资源位置不是那样的,所以我们需要移动一下。

1.项目根目录创建文件夹 mkdir static

2.配置settings.py 加上两行

STATIC_URL = ‘/static/’
STATIC_ROOT = ‘static/’
3.执行命令 python manage.py collectstatic 这样就把所有的静态资源转移到static里了。

运行一下应该没问题了。