您的位置:首页 > 运维架构 > Nginx

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

2019-01-22 23:15 519 查看

前提: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处理。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: