1.简介
1.1 WSGI
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。作用就是在协议之间进行转换。
WSGI 是一种通信协议。Django,Flask等自带WSGI,不过性能不好
django框架是自带WSGI server的,性能不好,常用于测试用途,发布时常用nginx的uwsgi
1.2 uwsgi
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
1.3 uWSGI
uWSGI是实现了uwsgi和WSGI两种协议的Web服务器
nginx中的HttpUwsgiModule的作用就是和uWSGI服务器进行交换
1. Django 是一个 Web 框架,框架的作用在于处理 request 和 reponse,其他的不是框架所关心的内容。所以怎么部署 Django 不是 Django 所需要关心的。 2. Django 所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是 Python 自带的 simple HTTPServer 创建的,在安全性和效率上都是不行的 3. 而uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议
Nginx,uwsgi, django之间的对话
- Nginx: hey,uWsgi,我收到一个请求,需要你做一些准备,然后由django来处理请求
- uwsgi:OK,nginx,我会处理的,然后将请求转发给django
- django:Thanks,uwsgi,给我一点时间,我会将响应给你的
- uwsgi:好的 ,我等你
- django:ok,我这边处理完了,请你把结果给nginx
- uwsgi: good job,nginx,这是结果
- nginx:cool,我收到了 ,我会把结果给客户端的,大家合作愉快
2.配置
2.1 下载uWSGI
pip3 install -i https://pypi.douban.com/simple uwsgi
2.2 创建配置文件
在指定的目录下创建名为uwsgi.ini的配置文件
touch uwsgi.ini
2.3 写入配置参数
[uwsgi] # 填写crm项目的第一层绝对路径 chdir = /opt/tf_crm/ # 填写crm项目第二层的相对路径,找到第二层目录下的wsgi.py # 这里填写的不是路径,是以上一个参数为相对,找到第二层项目目录下的wsgi.py文件 module = tf_crm.wsgi # 填写虚拟环境解释器的第一层工作目录 home = /opt/tf_crm/venv_crm master = true # 代表定义uwsgi运行的多进程数量,最大为服务器核心数 processes = 3
threads = 512 # 每个线程最大可以使用的线程数量,linux系统中一个进程最多为2048个线程, # 这里的socket参数,是用于和nginx结合部署的unix-socket参数, 127.0.0.1表示只接受同一台服务器发过来的请求,0.0.0.0代表接手任意服务器请求 # socket = 0.0.0.0:8000 # 线上不会用http参数,因为对后端是不安全的,使用socket参数是安全的连接,用nginx反向代理去访问 # 临时使用http参数,便于我们用浏览器调试访问 http = 0.0.0.0:8000 vacuum = true
enable-threads=true # 是否允许启动多线程
buffer-size=65536 # 请求或响应最大buffer
logto=/home/servers/ats/uwsgi.log # uwsgi日志路径
pidfile = uwsgi.pid # 保存pid信息,方便停止服务和重启服务
stats = 127.0.0.1:9191 # 统计uwsgi运行详情
2.4 启动项目
# 指定配置文件启动 uwsgi --ini ./uwsgi.ini --plugin python3
uwsgi --stop uwsgi.pid # 停止
uwsgi --reload uwsgi.pid # 重启
2.5 基于uWSGI访问项目
但是uwsgi对静态文件的解析性能很弱,线上是丢给nginx去处理的
从nginx反向代理到uwsgi
在nginx的配置文件中定义
location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; # uwsgi以socket方启动,优先
# http_pass 127.0.0.1:8000; # uwsgi以http方式启动的 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界