关于uWSGI+nginx+django项目的部署

前提:ubuntu16.04系统中,django2.0.9、uWSGI、nginx均以成功安装,django项目MyWeb也在开发环境中测试成功。
目的:通过配置文件(nginx的配置文件、uWSGI的配置文件)实现浏览器依靠nginx+uWSGI+django的方式访问网页。

我们知道,在nginx+uWSGI+django的生产环境中,浏览器访问网页的过程是:浏览器先向nginx发出HTTP请求报文,如果请求的是静态文件,由nginx直接返回给浏览器,否则,nginx会继续与uWSGI进行通信,获取动态内容(动态内容由uWSGI服务器和django框架通信获得),然后再返回给浏览器。

那么我们如何配置部署,才能使上述过程顺利进行呢?
1、首先,将项目MyWeb拷贝到/var/www/目录下。
2、然后,为项目MyWeb添加配置文件,并由nginx启动。
nginx相关的配置文件默然安装路径是/etc/nginx。在/etc/nginx/sites-available/目录下新建配置文件MyWeb.conf并由VIM编辑,命令如下:

sudo vi /etc/nginx/sites-available/MyWeb.conf

内容如下:

server {
    listen 80;  # 监听端口
    server_name 127.0.0.1;  # 服务器名(多个域名用逗号分隔)
    charset utf-8;  # 服务器字符集
    client_max_body_size 5M;  # 上传文件最大限制
    location /media  {  # 媒体文件位置
        alias /var/www/MyWeb/media;
    }
    location /static {  # 静态文件位置
        alias /var/www/MyWeb/static;
    }
    location / {   # 为uwsgi协议提供支持(实现与uWSGI服务器通信)
        uwsgi_pass 127.0.0.1:8888;  #为uWSGI服务器设置监听地址(套接字或sock文件)
        include /etc/nginx/uwsgi_params;  # 为uwsgi请求增加参数。
    } 
}

特别提示:为了便于理解,添加了注释,使用时请删除注释。

之后,将配置文件的快捷方式添加到/etc/nginx/sites-enabled/目录中,激活配置文件。命令如下:

sudo ln -s /etc/nginx/sites-available/MyWeb.conf
/etc/nginx/sites-enabled/MyWeb.conf

然后,启动nginx,加载配置文件。命令如下:sudo service nginx start。(另外,常用的命令还有sudo service nginx stop/restart/reload等)

特别说明:此时,根据配置文件的内容,访问127.0.0.1:80会报错。为什么?因为在配置文件中写明了,当访问127.0.0.1:80时,会交由uWSGI服务器处理,而uWSGI服务器还没有部署启动,所以报错。

3、使用配置文件启动uWSGI服务器。
uWSGI服务器可以通过独立命令或配置文件进行启动。使用配置文件启动,不但避免使用过长的命令,而且能增加更多的配置。

新建配置文件,并进行编辑。命令如下:

cd /var/www/MyWeb
sudo vi uwsgi.ini

配置文件内容如下:

 [uwsgi]
    socket = 127.0.0.1:8888  # 监听地址(套接字或sock文件)
    chdir = /var/www/MyWeb/  # 项目根目录
    wsgi-file = MyWeb/wsgi.py  # wsgi文件路径
    processes = 3  # 开启的工作进程数
    threads = 5  # 每个工作进程的线程数
    chmod-socket = 664  # 客户端访问MyWeb.sock文件的权限  
    chown-socket = www-data  # 客户端请求的所有者
    pidfile= /var/www/MyWeb/MyWeb.pid  # 保存进程文件的路径
    vacuum = true  # 服务器退出时自动删除sock文件和pid文件

特别提示:为了便于理解,添加了注释,使用时请删除注释。

然后,通过配置文件启动uWSGI服务器。命令如下:

sudo uwsgi --ini uwsgi.ini

这时,浏览器访问127.0.0.1:80时,就能访问成功了。本质是:当浏览器访问127.0.0.1:80时,根据配置文件MyWeb.conf中location / … uwsgi_pass 127.0.0.1:8888,nginx将该HTTP请求交由uWSGI服务器处理,nginx与uWSGI的通信是由这个socket(127.0.0.1:8888)完成的。

特别说明1:MyWeb.conf中,uwsgi_pass 127.0.0.1:8888与 socket = 127.0.0.1:8888必须一致。
特别说明2:浏览器访问127.0.0.1:80时,由于路径为“/”,所以,nginx根据配置文件MyWeb.conf,将HTTP请求通过socket(127.0.0.1:8888)转发给uWSGI处理。但浏览器访问localhost:80时,会显示nginx测试成功页面,而不会交由uWSGI处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值