概述
- 从 nginx 这一层反向代理往程序框架这一层里面,我们想了解它具体的一个实现过程是什么样子的
- uwsgi 的诞生顺序
- cgi —> Fastcgi —> WSGI —> uwsgi
- 这里 wsgi 是 python 语言的通用接口标准
- uwsgi 是实现 wsgi 的一种接口
- python 为啥使用 uwsgi 接口标准并且通过 nginx 来进行代理
- 1 )安全
- 通过Nginx做代理比HTTP直连更安全,并且Nginx可以实现很多的访问控制
- 作为一个代理层可结合 lua 来实现更多的一些代理层和应用层的访问控制
- 使用 uwsgi 的这种启用模式,它对于安全是一个非常好的
- 比如说,启用UWGI的用户必须得是系统上的普通用户才能够启动,不给root用户启动的(报错处理)
- 2 )效率
- 动静分离提升访问效率
- 1 )安全
环境准备与配置
- 配置 python3 环境,此处略过
- 安装 Django 框架,安装 uwsgi
- $
pip3 install django
- $
pip3 instal uwsgi
- $
- 配置 django 工程
- 生成项目:$
/opt/python3.6/bin/django-admin.py/startproject demo
- 在 setting.py 中的
ALLOWED_HOSTS = ['这里填入部署服务器的ip地址']
- 生成项目:$
- 新建普通用户 uwsgi
- 在 linux 上, $
useradd uwsgi
- 在 linux 上, $
- 配置 uwsgi
- $
cd /opt/app/conf/
- $
vim uwsgi.ini
[uwsgi] socket = 127.0.0.1:9999 # chdir=/path/to/your/project workers = 2 max-requests = 1000 buffer-size = 30000 pidfile = /var/run/uwsgi/uwsgi.pid # 启动后 pid 写入的位置 daemonize = /var/log/uwsgi.log
- 注意这里,uwsgi 目录要有被 uwsgi用户写进去的权限 $
chown -R uwsgi /var/run/uwsgi
- $
- 启动 uwsgi 服务
- 切换到 uwsgi 的普通用户 $
su - uwsgi
- 启动前确保之前没有启动过 uwsgi 进程 $
ps -ef | grep uwsgi
, 有的话 kill 掉 - 启动 $
/opt/python3.6/bin/uwsgi --ini ./uwsgi.ini
- 确认下本地的监听端口:$
ss -luntp | grep 9999
确认监听建立好了
- 切换到 uwsgi 的普通用户 $
- 配置 nginx
server { listen 8090; server_name abc.com; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9999; uwsgi_param UWSGI_SCRIPT demo.wsgi; # 工程目录内的wsgi脚本模块路径 uwsgi_param UWSGI_CHDIR /path/to/your/project; # 工程所在目录 index index.html index.htm; client_max_body_size 35m; } }
- 注意上述示例中,wsig.py 的访问路径为:/path/to/your/project/demo.wsgi
- 检查,加载,启动nginx
- 访问:ip:8090 即可正常访问