1.nginx

是一个Http和反向代理服务器

2.uwsgi

uWSGI、WSGI和uwsgi的区别

WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

uwsgi是一种线路协议,常用于在uWSGI服务器与其他网络服务器的数据通信

Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换

3.请求响应的过程

  用户从网页浏览器中发出请求,nginx 服务器收到请求后,会通过 uwsgi 模块将请求转发给 uwsgi 服务器,uwsgi 服务器通过django处理完毕后将结果返回给 nginx,浏览器将最终的结果展现给用户

Nginx+uwsgi+Django环境部署_sqlite

 4.搭建

(1)Django运行

将项目上传,使用的是sqlite数据库

安装sqlite3

sudo apt-get install sqlite3

查看sqlite版本

sqlite3 -version

运行

python manage.py runserver 0.0.0.0:8080 

说明:

  0.0.0.0表示捆绑监听服务器上的所有网卡IP地址

  Django 启动遇到 Invalid HTTP_HOST header

(2)安装uwsgi

需要在Linux系统上

pip install uwsgi 

国内镜像

 pip install -i https://pypi.douban.com/simple uwsgi

  查看版本

uwsgi --version

Nginx+uwsgi+Django环境部署_django_02

  A.测试

  创建test.py

def application(env,start_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return [b"Hello,this is uwsgi."]

  运行测试

uwsgi --http :8080 --wsgi-file test.py

Nginx+uwsgi+Django环境部署_django_03

浏览器打开http://192.168.2.157:8080/

页面输出

  Hello,this is uwsgi.

  B.uwsgi运行Django

  直接运行

  进入项目根目录

uwsgi --http :8080 --module mydjango.wsgi

Nginx+uwsgi+Django环境部署_django_04

说明:

  --module mydjango.wsgi为加载指定的wsgi模块

  热加载

uwsgi --http :8080 --module mydjango.wsgi --py-autoreload=1

Nginx+uwsgi+Django环境部署_nginx_05

浏览器访问

Nginx+uwsgi+Django环境部署_sqlite_06

  使用uwsgi配置文件

  在项目根目录添加uwsgi.ini

[uwsgi]
socket=127.0.0.1:8080
master = true
chdir=/www/mydjango
module=mydjango.wsgi
max_requests= 1000
daemonize=/home/baby/mydjango.log
vacuum=true

  运行

uwsgi --ini uwsgi.ini

Nginx+uwsgi+Django环境部署_python_07

查看输出的log

 Nginx+uwsgi+Django环境部署_django_08

(3)nginx配置uwsgi

安装nginx

sudo apt-get install nginx

启动

sudo service nginx restart

uwsgi_params配置文件

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

  mydjango.conf

server {
    listen      8000;
    server_name  192.168.2.157;
    charset     utf-8;

    access_log /home/freshaccess.log;

    error_log /home/fresherror.log;
    # max upload size
    client_max_body_size 75M;

    location / {
        uwsgi_pass  0.0.0.0:8080;
        include    uwsgi_params;
        uwsgi_send_timeout 3600;        # 指定连接到后端uWSGI的超时时间。
        uwsgi_param UWSGI_SCRIPT mydjango;
        uwsgi_param UWSGI_CHDIR /www/mydjango;
    }
}

重启nginx

浏览器访问http://192.168.2.157:8000/blog/

Nginx+uwsgi+Django环境部署_sqlite_09

 访问过程

web client  <->  web server(nginx) <-> socket <-> uWSGI <-> Django