抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

为什么使用nginx和uwsgi?

已经打算做前后端分离,那么对于静态资源等就使用nginx进行部署来,然后对于接口请求,也使用nginx做转发。

说到uwsgi,得先提一下wsgi。

WSGI协议(通讯协议):Python用于Web开发的协议,请求数据,响应数据的封装,开发者只负责处理中途的数据

Django一般都自带wsgi服务器,但是性能并不怎么样,一般自己开发调试,放到线上使用还是使用uwsgi。

uwsgi协议(传输协议,速度很快):uWSGI程序实现的一个自有的协议(采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都更快)

注意

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

工作流程

三者工作流程如下图

image.png

配置Django

既然要部署在线上,这边只需要更改setting.py的两个配置:allow_host和debug

关闭debug模式

DEBUG = False

设置允许来源为本地

ALLOWED_HOSTS = [“127.0.0.1”, “localhost”]

前者是为来关闭调试模式,防止发生错误的时候,泄漏一些系统的关键信息。

后者是为因为在浏览器访问直接作用于Nginx,因此Django本身端口无需暴露给外网,只留给本地本地,走转发就行来。

配置uwsgi

安装依赖库

1
2
3
4
5
yum install libxml2

yum install gcc

yum install python-devel

安装

1
pip install uwsgi

安装之后在你python的bin目录下就有来uwsgi命令,为来使用方便,可以在/usr/bin目录加一个软链

uwsgi做软链

1
2
sudo ln -s  /xxx/xxx/python3/bin/uwsgi /usr/bin/uwsgi
# 此处python3之前的目录根据自己的来

在django的项目目录下新增uwsgi.ini文件,配置如下(以下projectname写自己的项目名**)**

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[uwsgi]
socket = 127.0.0.1:8000 # uwsgi本身启动端口
chdir=/xx/xx/projectname # 项目目录
module= projectname.wsgi:application #projectname写自己的
wsgi-file = projectname/wsgi.py # wsgi.py所在projectname名+wsgi,路径相对于chdir而言
callable =projectname # python内用以启动的application名
processes = 2 # 处理器个数,根据cpu来
threads = 2 # 线程数
stats = 127.0.0.1:9000 # 状态检测地址,即django启动的端口
max-requests = 1000 # 最大请求数
limit-as = 512 # 每个uwsgi进程的虚拟内存使用数,大小mb,根据机器配置酌情限制下
buffer-size = 30000 # uwsgi包解析的内部缓存区大小,默认是4k,单位kb。
pidfile =/home/username/projectname/uwsgi.pid # uwsgi的进程pid文件
daemonize = /home/username/projectname/uwsgi.log # uwsgi后台启动,日志存储位置

启动uwsgi

1
2
3
# 依然在django项目根目录

uwsgi uwsgi.ini

查看下

image.png

可以看到有三个,其中pid为4528的是主进程,后面4531和23151都是子进程,因为这里processes设置的2。

安装Nginx(openresty)

openresty是基于nginx由国人大神春哥开发的开源服务器,是兼容nginx的,加入了lua支持更多复杂的写法,不过暂时用不到,由于项目里使用openresty,这边就安装openresty吧。

安装依赖

1
yum install pcre-devel openssl-devel gc-c++

安装openresty

1
2
3
4
5
6
7
8
9
10
11
#下载
wget https://openresty.org/download/openresty-1.15.8.2.tar.gz

#解压
tar -zxvf openresty-1.15.8.2.tar.gz

#安装
mkdir -p /usr/local/openresty
cd openresty-1.15.8.2
./configure --prefix=/usr/local/openresty --with-http_ssl_module
make && make install

检验是否安装成功

1
2
cd /usr/local/openresty/nginx
sbin/nginx -c conf/nginx.conf -t

如果出现下面的内容说明安装成功了。

1
2
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test success

修改配置文件

1
2
3
4
5
6
7
cd /usr/local/openresty/nginx

#可先把原来的备份下
cp conf/nginx.conf conf/nginx.conf.bak

#修改
vim conf/nginx.conf

配置文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
user  root; #若要启动80则需要root权限,简单点就写root,安全点单独创建具备免密执行权利的用户
worker_processes 1; #nginx的线程数

error_log logs/error.log; #错误日志地址

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {
listen 80;
server_name xxx.xxx.xxx.xxx #你的公网ip;
charset utf-8;

location / {
include uwsgi_params; #倒入uwsgi配置
uwsgi_pass 127.0.0.1:8000; #uwsig启动地址和端口,跟上面uwsgi.ini中的socket一致
client_max_body_size 35m;
}
}
}

启动openresty

1
sbin/nginx -c conf/nginx.conf

至此,都已安装配置完毕,手动启动的只有openresty和uwsgi,此时访问你的公网地址,就可以访问你的django项目了。

评论