uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
uwsgi性能非常高
uWSGI的主要特点如下
pip install uwsgi
这里以centos7为例进行安装
执行以下命令:
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了。
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和nginx
uwsgi --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