客户端 nginx uWSGI Django


在这里插入图片描述
uWSGI是一个web服务器,它实现了WSGI协议、uwsgi协议、HTTP等协议;(Tornado、Flask、Django)

相关概念:

  • WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。server和application的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。
  • uwsgi:与WSGI一样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。
  • uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等

WSGI协议主要包括server和application两部分:

  • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
  • WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。

WSGI协议其实是定义了一种server与application解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的server和application组合实现自己的web应用。

uwsgi 接收到请求之后将包进行处理,处理成 wsgi 可以接受的格式,并发给 wsgi,
wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将
返回值再次交给 wsgi,wsgi 将返回值进行打包,打包成 uwsgi 能够接收的格式,
uwsgi 接收 wsgi 发送的请求,并转发给 nginx,nginx 最终将返回值返回给浏览器。

把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用,将 WSGI 协议转为HTTP协议并转发给 nginx,nginx 最终将返回值返回给浏览器

Nginx

Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。

nginx 和 uwsgi 的区别和作用:

  1. nginx 是对外的服务器,外部浏览器通过 url 访问 nginx, uwsgi 是对内的服务器,主要用来处理动态请求。
  2. nginx 接收到浏览器发送过来的 http 请求,将包进行解析,分析 url, a.如果是静态文件请求就直接访问用户给 nginx 配置的静态文件目录,直接返回用户请求的静态文件, b.如果不是静态文件,而是一个动态的请求,那么 nginx 就将请求转发给 uwsgi

什么要用uWsgi?

因为nginx不支持wsgi协议,及无法直接调用py开发的webApp

前端

S137005023-Mac:~ xyt$ ssh root@XXXXXXXX
root@XXXXXXXX's password: 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-96-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Sat Jan 22 11:09:09 2022 from 10.130.20.12
root@psh-ats-02:~# cd ../etc/nginx/conf.d
root@psh-ats-02:/etc/nginx/conf.d# ls
ATS_WEB_Dist_nginx.conf         ATS_Web_Test_nginx.conf   test.conf
ATS_WEB_Django_nginx.conf       blog_nginx.conf           Tornado_nginx.conf
ATS_WEB_Django_Test_nginx.conf  Fixture_Check_nginx.conf  xiaoqian_test.conf
ATS_Web_nginx.conf              SSL
ATS_WEB_Test_Dist_nginx.conf    SSL-OLD
root@psh-ats-02:/etc/nginx/conf.d# cat ATS_WEB_Dist_nginx.conf

                                                                                
server{
        listen 80; 
        server_name 域名;
        charset     utf-8;
        ssl on; 
        ssl_certificate /etc/nginx/conf.d/SSL/psh_cert.pem;
        ssl_certificate_key /etc/nginx/conf.d/SSL/psh_key_with_pass.key.unsecure; 
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m; 
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers on; 
 
        location / { 
                root /data/django/ATS_Web_Vue/template/dist;
                index index.html index.htm;
                try_files $uri $uri/ /index.html;
    
        }   

}

后端

root@psh-ats-02:/etc/nginx/conf.d# cat ATS_WEB_Django_nginx.conf

upstream VueTest {                                                                             
    server 127.0.0.1:83; # for a web port socket
}

server {
    listen 81;
    #listen 443;
    server_name 域名;
    charset     utf-8;
    ssl on;
    ssl_certificate /etc/nginx/conf.d/SSL/psh_cert.pem;
    ssl_certificate_key /etc/nginx/conf.d/SSL/psh_key_with_pass.key.unsecure;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;

    access_log      /var/log/nginx/Ats_Web_Vue_access.log;
    error_log       /var/log/nginx/Ats_Web_Vue_error.log;

    client_max_body_size 75M;


    location / {
        uwsgi_pass  VueTest;
        include     /etc/nginx/uwsgi_params;
    }

}

uwsgi.ini

uwsgi.ini  uwsgi.log  uwsgi.pid
root@psh-ats-02:/data/uwsgi_ini/Ats_Web_Vue# cat uwsgi.ini



[uwsgi]                                                                                                                                                                              
socket=:83
#http= 127.0.0.1:8000

# the base directory (full path)
chdir = /data/django/ATS_Web_Vue/

# Django s wsgi file
module= PSH_ATS_WEB_VUE.wsgi
wsgi-file= /PSH_ATS_WEB_VUE/wsgi.py

# static
static-map = /static=%(chdir)/static

# master
master = true

# maximum number of worker processes
processes = 8

# clear environment on exit
vacuum = true

#监控python模块mtime来触发重载 (只在开发时使用)
py-autoreload=1

#在每个worker而不是master中加载应用
lazy-apps=true 

#允许用内嵌的语言启动线程。这将允许你在app程序中产生一个子线程
enable-threads = true 

#设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽>略之前已经接收到的请求而直接结束)
reload-mercy = 8 

#设置最大日志文件大小
log-maxsize = 5000000

daemonize = /data/uwsgi_ini/Ats_Web_Vue/uwsgi.log
pidfile = /data/uwsgi_ini/Ats_Web_Vue/uwsgi.pid

#daemonize = %(chdir)/config/uwsgi.log
#pidfile = %(chdir)/config/uwsgi.pid






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值