uwsgi:是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
运行过程:
nginx作为服务器的最前端,它将接受WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是nginx的强项,静态文件像我们django博客项目中的static文件夹下面的图片,css,js)。
nginx将所有的非静态请求(像显示文章的详细信息,通常这类信息都保存在数据库,因此需要调用数据库获取数据)通过uwsgi传递给Django,由django来处理,从而完成一次WEB请求,uwsgi的作用就类似一个桥接器,起到桥梁的作用。
部署步骤:
安装zlib、pcre及nginx
wget https://www.zlib.net/fossils/zlib-1.2.10.tar.gz
tar -xzvf zlib-1.2.10.tar.gz
cd zlib-1.2.10
./configure --prefix=/usr/local/zlib
make
make install
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
tar -xzvf pcre-8.40.tar.gz
cd pcre-8.40
./configure --prefix=/usr/local/pcre --libdir=/usr/local/lib/pcre --includedir=/usr/local/include/pcre
make
make install
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --with-zlib=/opt/zlib-1.2.10 --with-pcre=/opt/pcre-8.40 --with-http_stub_status_module --with-http_realip_module --with-http_gzip_static_module --with-http_ssl_module
make
make install
安装Pip、Django、Uwsgi、virtualenv根据实际需求安装
yum install epel-release python-devel
yum install python-pip
pip install -U pip
pip install uwsgi --upgrade
pip install virtualenv
pip install Django==1.11.8
pip install PyMySQL
pip install mysqlclient
测试Uwsgi是否正常创建test.py文件
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
uwsgi --http :8888 --wsgi-file test.py
浏览器或curl访问888端口成功即可;
配置Uwsgi创建mysite_uwsgi.ini文件(此处是根据项目名字创建的,路径为项目路径根目录)
[uwsgi]
socket = :8000
chdir = /env_mysite/mysite
module = mysite.wsgi
master = true
processes = 8
vacuum = true
daemonize = /tmp/uwsgi.log
启动uwsgi(后台运行uwsgi并把log输出到/tmp/uwsgi.log)
setsid uwsgi mysite_uwsgi.ini &
配置nginx(关键参数)
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; #uwsgi的端口号
uwsgi_read_timeout 2;
error_log logs/mysite_error.log error;
access_log logs/mysite_access.log main;
}
location /static {
expires 30d;
add_header Cache-Control private;
alias /env_mysite/mysite/static/; #Django的静态目录
error_log logs/static_error.log error;
access_log logs/static_access.log main;
}
最后启动nginx即可,nginx参数根据实际业务需求要进行优化,如设置上传文件大小、缓存、启用压缩等等,此处不做详细描述;
附uwsgi常用选项:
http : 协议类型和端口号
processes : 开启的进程数量
workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
chdir : 指定运行目录(chdir to specified directory before apps loading)
wsgi-file : 载入wsgi-file(load .wsgi file)
stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
threads : 运行线程。
master : 允许主进程存在(enable master process)
daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,是把运行记录输出到一个本地文件上。
pidfile : 指定pid文件的位置,记录主进程的pid号。
vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)
Tag标签:「nginx uwsgi django」更新时间:「2021-11-03 21:24:54」阅读次数:「815」