uwsgi介绍

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

  1. WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
  2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  3. 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
  4. uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

uwsgi性能非常高

nginx 与 Tengine配置区别_负载均衡

 

uWSGI的主要特点如下

  1. 超快的性能
  2. 低内存占用(实测为apache2的mod_wsgi的一半左右)
  3. 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
  4. 详尽的日志功能(可以用来分析app性能和瓶颈)
  5. 高度可定制(内存大小限制,服务一定次数后重启等

 

Uwsgi 安装使用

pip install uwsgi

Nginx安装使用 

这里以centos7为例进行安装

安装Nginx源

执行以下命令:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装该rpm后,我们就能在/etc/yum.repos.d/ 目录中看到一个名为nginx.repo 的文件。

安装Nginx

安装完Nginx源后,就可以正式安装Nginx了。

yum install -y nginx

环境准备好之后下面就开始进行部署了:

这里我们的项目目录为/OSAOP,首先在项目目录下创建一个script文件放置uwsgi配置文件和日志

mkdir /OSAOP/script

然后按照以下步骤进行

一、配置uwsgi,为了配置负载均衡我们这里准备两个uwsgi的配置文件,启动2个wsgi进程

vim uwsgi.ini
写入如下配置信息:
[uwsgi]
 #使用nginx连接时使用,Django程序所在服务器地址
 socket=192.168.92.134:8000
 #直接做web服务器使用,Django程序所在服务器地址
 #http=192.168.92.134:8000
 #项目目录
 chdir=/OSAOP
 #项目中wsgi.py文件的目录,相对于项目目录
 wsgi-file=OSAOP/wsgi.py
 # 进程数
 processes=5
 # 线程数
 threads=4
 # uwsgi服务器的角色,开启master, 将会多开一个管理进程, 管理其他服务进程
 master=True
 # 存放进程编号的文件
 pidfile=/OSAOP/script/uwsgi.pid
 # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的    #python  manager  runserver是依赖终端的
 daemonize=/OSAOP/script/uwsgi.log
 # 指定静态文件
 static-map=/static=/OSAOP/staticfiles
 # 启动uwsgi的用户名和用户组
 uid=autohp
 gid=autohp
 #默认的uwsgi分配一个小的buffer(4kb)来接收每个请求的头信息,设置为50kb
 buffer-size  = 51200
 二、配置另外一个uwsgi文件vim uwsgi2.ini
然后写入如下配置信息:
[uwsgi]
 #使用nginx连接时使用,Django程序所在服务器地址
 socket=192.168.92.134:8001
 #直接做web服务器使用,Django程序所在服务器地址
 #http=192.168.92.134:8001
 #项目目录
 chdir=/OSAOP
 #项目中wsgi.py文件的目录,相对于项目目录
 wsgi-file=OSAOP/wsgi.py
 # 进程数
 processes=5
 # 线程数
 threads=2
 # uwsgi服务器的角色
 master=True
 # 存放进程编号的文件
 pidfile=/OSAOP/script/uwsgi2.pid
 # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的    #python  manager  runserver是依赖终端的
 daemonize=/OSAOP/script/uwsgi2.log
 # 指定静态文件
 static-map=/static=/OSAOP/staticfiles
 # 启动uwsgi的用户名和用户组
 uid=autohp
 gid=autohp
 buffer-size = 102400
 三、到此处两个uwsgi的配置文件已经配置完成,下面开始配置Nginx打开nginx的配置文件:
 vim /etc/nginx/nginx.conf 
输入如下信息:
user root;
 worker_processes  1;error_log  /var/log/nginx/error.log warn;
 pid        /var/run/nginx.pid; events {
     worker_connections  1024;
 } http {
     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
     #tcp_nopush     on;    keepalive_timeout  65;
    #gzip  on;
#include的作用是可以将server的配置信息写到conf.d目录下面的conf文件
   include /etc/nginx/conf.d/*.conf;
    upstream OSAOP {       server 192.168.92.134:8000;
       server 192.168.92.134:8001;
}
  } 然后保存信息后打开default.conf配置server信息
vim  /etc/nginx/conf.d/default.conf
可以将文件的原内容全部清空,下入以下信息:
server {
     listen         80; 
     server_name    192.168.92.134 
     charset UTF-8;
     access_log      /var/log/nginx/myweb_access.log;
     error_log       /var/log/nginx/myweb_error.log;
  
     client_max_body_size 75M;
  
   # 设置媒体文件目录
     location /media  {
         alias /OSAOP/media/; 
     }
     # 设置静态文件目录
     location /static {
         expires 30d;
         autoindex on; 
         add_header Cache-Control private;
         alias /OSAOP/staticfiles/;
      }
    location / {
             include uwsgi_params;
             uwsgi_pass OSAOP;
         }
  }
 到此已经完成了所有配置,并实现了对两个端口的负载均衡,下面启动uwsgi和nginxuwsgi --ini uwsgi.ini
uwsgi --ini uwsgi2.ini
/usr/sbin/nginx -c /etc/nginx/nginx.conf 
uwsgi停止命令:
uwsgi --stop /OSAOP/script/uwsgi.pid
uwsgi --stop /OSAOP/script/uwsgi2.pid
nginx重启命令:
/usr/sbin/nginx -s reload
启动之后可以查看uwsgi和nginx进程:
ps -ef|grep uwsgi
 ps -ef|grep nginx