uwsgi 快速入门
uwsgi 快速入门
一、 概述
1、 简单介绍
WSGI(Web Server Gateway Interface),定义了web服务器(nginx、apache、iis等)和 web应用(或者将web框架,flask、django等)之间的接口规范。也就是说,只要 web服务器和 web应用都遵守WSGI协议,那么 web服务器和 web应用就可以随意的组合。
uwsgi的启动可以把参数加载命令行中,也可以是配置文件 .ini, .xml, .yaml 配置文件中,个人用的比较多得是 .ini 文件。
通过uwsgi --help
可以查看得到:
-x|--xmlconfig load config from xml file -x|--xml load config from xml file --ini load config from ini file -y|--yaml load config from yaml file -y|--yml load config from yaml file
2、 环境配置
使用 pip 进行安装
pip install uwsgi
二、 第一个 WSGI 应用
1、 运行
让我们从一个简单的 "Hello World" 开始,创建文件 index.py,代码如下:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
WSGI Python 加载器将会搜索的默认函数 application 。
接下来我们启动 uWSGI 来运行一个 HTTP 服务器,将程序部署在HTTP端口 8080上:
uwsgi --http :8080 --wsgi-file index.py
2、 添加并发
默认情况下,uWSGI 启动一个单一的进程和一个单一的线程。
你可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 ,也可以两者同时使用。
uwsgi --http :9090 --wsgi-file index.py --master --processes 4 --threads 2
以上命令将会生成 4 个进程, 每个进程有 2 个线程。
如果你要执行监控任务,可以使用 stats 子系统,监控的数据格式是 JSON:
uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
我们可以安装 uwsgitop(类似 Linux top 命令) 来查看监控数据:
pip install uwsgitop
三、 结合 Web 服务器使用
1、 Flask
这里可以使用配置文件来支持 Flask 运行。
[uwsgi] # 监听的端口号 socket = localhost:5000 # 开启主进程 master = true # 项目文件路径 chdir = /root/www/ # 项目启动文件 wsgi-file = app.py # flask 实例名称 callable = app # 项目的进场数量 processes = 4 # 项目的线程数量 threads = 2 # 查看监控数据 stats = localhost:9191 # 主进程的 pid # 如:uwsgi --reload uwsgi pidfile = uwsgi.pid # 日志文件 daemonize = /var/log/uwsgi/uwsgi.log # 允许用内嵌的语言启动线程,这将允许你在app程序中产生一个子线程 enable-threads = true # socket 权限 chmod-socket = 666 # 指定虚拟环境位置 home = .venv
启动运行:
uwsgi -d --ini yourfile.ini # 开启服务
2、 Django
uwsgi 的配置文件
[uwsgi] socket = localhost:5000 master = true chdir = /root/temp/django/CRM wsgi-file = /root/temp/django/CRM/CRM/wsgi.py processes = 4 threads = 2 daemonize = /var/log/uwsgi/uwsgi.log pidfile = uwsgi.pid chmod-socket = 666 enable-threads = true stats = localhost:9191 home = .venv
启动运行:
uwsgi -d --ini yourfile.ini # 开启服务
3、 Nginx配置
这里使用 flask 的为一个示例
user root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { 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; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 4096; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; upstream flaskservice{ server localhost:5000; } server { #SSL 默认访问端口号为 443 listen 443 ssl; #请填写绑定证书的域名 server_name steve1.cn; #请填写证书文件的相对路径或绝对路径 ssl_certificate cert/steve1.cn_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key cert/steve1.cn.key; ssl_session_timeout 5m; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 实现下载站点 location /download { root /root/www; autoindex on; autoindex_localtime on; } # 静态资源通过 Nginx 来分发 location ~/.*\.(html|htm|js|css|ico|png|jpg|gif|svg|txt) { root /root/www/static; } # 动态资源通过 Flask 来分发,同时使用了 uwsgi location / { include uwsgi_params; uwsgi_pass flaskservice; } # 错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 80; #请填写绑定证书的域名 server_name steve1.cn; # 把http的域名请求转成https location / { rewrite ^/ https://$host$request_uri permanent; } } }
本文来自博客园,作者:Kenny_LZK,转载请注明原文链接:https://www.cnblogs.com/liuzhongkun/p/17047749.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-01-12 3DMax基础用法
2022-01-12 Pycharm安装Markdown插件