nginx+uwsgi+python3+django1.11

uwsgi简介

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的。uWSGI在实际环境中,主要和nginx一起使用,这时作为django 与 nginx 的中间件。请求和响应的流程如下:
Request > Nginx > uWSGI > Django > uWSGI > Nginx > Response
请求先交由Nginx,如果是静态内容就自己处理了,如果是动态内容就交给uWSGI服务器,uWSGI服务器处理整个Django项目的Python代码,响应请求,原路返回,但是与fastcgi不同,Nginx、uWSGI和Django可以独立部署,然后整合。

1、安装各类基础模块

yum install gcc-c++ -y
(为centos系统增加编译功能)
yum install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel -y
(安装这些模块都是为了成功编译安装python3,防止出现各种异常)
yum install libxml* -y
(安装这个模块是为了让uwsig支持使用“-x"选项,能通过xml文件启动项目)

2、编译安装python3

wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
tar -zxf Python-3.6.6.tgz
cd Python-3.6.6
./configure --prefix=/usr/local/python3
make && make install

配置pip源:

tee /etc/pip.conf <<EOF
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
[list]
format=columns
EOF

创建软连接:

ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
(以上两个ln命令是为了方便在终端中直接使用python3和pip3命令)

3、给python3安装django和uwsgi以及配置启动项目文件

pip3 install "django>=1.11,<2.0"
pip3 install uwsgi

建立软连接

ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3

使用django-admin创建Django项目

[root@node3 project]# django-admin startproject myproject
[root@node3 myproject]# cd myproject
[root@node3 myproject]# python3 manage.py startapp myapp

测试uwsgi是否正常
创建测试文件test.py

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'Hello World']

基于HTTP协议运行uWSGI,如果uWSGI安装正常的话,可以在浏览器中访问8001端口,看到Hello world字样

uwsgi3 --http :8001 --wsgi-file test.py

在你的django项目下(与manage.py同一目录)新建uwsgi.ini ,内容如下:

vim /project/myproject/uwsgi.ini
[uwsgi]
socket=127.0.0.1:8000
chdir=/project/myproject
module=myproject.wsgi
master=true
processes=4
threads=2
buffer-size=60000
vacuum=true

其中module=myproject.wsgi表示/project/myproject/uwsgi.ini
运行uwsgi:

nuhup uwsgi3 --ini uwsgi.ini &

4、安装nginx和配置nginx.conf文件

yum install epel-release nginx -y
vim /etc/nginx/nginx.conf
    server {
        listen 8996;
        server_name localhost;
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8000; #与uwsgi通信的地址
        }
    }
nginx -t
service nginx start

在浏览器访问http://IP:8996即可显示django项目主页
注意:
如果服务器是映射的,nginx配置文件里面的server_name要写外网的IP或者域名
若是uwsgi运行正常,nginx运行也正常,但就是连接不起来,可以检查下系统是否开启了selinux,需要关闭它才行。
不要在python虚拟环境中使用uwsgi,会有一些问题,当然也可以解决,参考:https://stackoverflow.com/questions/14194859/importerror-no-module-named-django-core-wsgi-for-uwsgi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值