uWSGI+Nginx+Django安装和配置

uWSGI是为Python语言定义的通用网关接口,它承担python web框架(django、flask、web.py等)和web服务器(nginx、apache、lighttpd等)之间的中间层。


    浏览器                      chrome、firefox、ie等
      |
    web服务器                  nginx、apache等
      |
    网关接口                    CGI、FastCGI、WSGI等
      |
    Python(程序、Web框架)    Django、Flask、Tornado等

python中自带的wsgiref就是一种wsgi接口的标准实现,但是,由于100%使用python实现等原因,导致wsgiref实在过于缓慢,只能用于测试和学习。生产环境中我们需要使用性能更高的服务器,目前常用的wsgi服务器有:uWSGI、Gunicorn、twisted.web。

1 uWSGI的安装
uWSGI是用C语言写的高性能WSGI服务器,安装uWSGI前我们需要安装Python和C编译器(GCC)。推荐使用python包管理器pip安装uWSGI。


#安装最新稳定版
pip install uWSGI
#也可以安装长期支持版(LTS版本)
#pip install
Ubuntu下可以使用apt-get来安装


apt-get install uwsgi 

FedoraRedHatCentOS下使用yum安装

yum groupinstall "Development Tools"
yum install python 

编译安装,从github下载uwsgi代码,cd到目录下

python uwsgiconfig.py --build

2 测试uwsgi是否安装成功
在终端中输入以下命令查看uwsgi的版本号,如果输出正常,说明uswgi已安装成功


$ uwsgi --version
2.0.11.1
我们可以编写一个简单的wsgi应用来测试uwsgi是否被安装成功,首先创建一个test.py文件:


# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2
运行uwsgi:


uwsgi --http :8000 --wsgi-file test.py
参数中,http :8000表示使用http协议,端口号为8000,wigi-file则表示要运行的wsgi应用程序文件。uwsgi运行后打开浏览器,访问:8000/ ,或者是相应服务器地址的8000端口,就可以看到hello world 页面了。

上面的例子中,我们用浏览器直接访问了uwsgi运行的python程序(只有一个入口函数的wsgi测试应用test.py),其访问结构如下所示。


    浏览器 <-> uWSGI <-> Python
上述方式运行uWSGI服务的过程中,可以使用CTRL+C即可停止服务,在后续的章节中会讲到自动管理和部署。

3 nginx和django的配置
nginx和django的安装不是本文的重点,故在此略去,只讨论配置部分。在这里,我们要实现的效果如下:


    浏览器 <-> nginx <-> uWSGI <-> Django(python)
uwsgi_params 配置文件
uWSGI使用的协议不完全是标准的WSGI协议,我们需要从Github下载uwsgi_paraments配置文件,并将该文件拷贝到项目路径中(例如:/user/home/pengquanxin/projects/mysite1/)。

Nginx服务器配置
接下来,要配置nginx服务器和uWSGI互通,可以使用unix套接字方式和TCP端口方式。在nginx配置文件夹(/etc/naginx/site-enabled 或 /usr/local/etc/nginx/sites-enabled)中新建网站的配置文件mystie_nginx.conf,输入以下内容:


# mysite_nginx.conf

# nginx需要连接的上游
upstream django {
    server unix:///path/to/your/mysite/mysite.sock; # 使用unix套接字
    #server 127.0.0.1:8001; # 使用TCP端口请注释上一行,并取消本行注释,这里的端口指的是跑uwsgi的端口
}

# nginx服务器配置
server {
    # 监听端口
    listen      80;
    # 域名
    server_name .example.com;
    # 编码
    charset    utf-8;

# 最大上传大小
    client_max_body_size 75M; 

# Django 的media路径
    location /media  {
        alias /path/to/your/mysite/media; 
    }

# 静态文件路径
    location /static {
        alias /path/to/your/mysite/static;
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/790ea34f9cc942ee764901c0260f3501.html