全能型 uWSGI 配置

在进行 Python web 开发时,使用 Django、Flask 等框架开发完毕后,部署时通常需要选择一个支持 wsgi 协议的 Web 服务器程序。目前比较通用的选择是 nginx + uWSGI,使用 nginx 来处理静态文件请求,其余动态内容再转发给 uWSGI 交给 web 后台处理,网上这样的配置教程也是最多的。

作为两款大名鼎鼎的服务器程序 nginx 负责静态文件,uWSGI 负责动态内容,各种在自己擅长的领域各施其职,的确效率很高,是高性能的 Python web 系统部署时的首选。

不过有时用 Python 写了个小站点,性能需求并不高时。部署服务还要安装 nginx 和 uWSGI 两个服务器程序就显得有点麻烦了。能否把这些工作都交给一个服务器程序呢。

全能型 uWSGI 配置

其实 uWSGI 也可以用来直接提供静态文件,虽然相比 nginx 效率要低一些,但部署时配置起来更为方便。只需在 uWSGI 的配置文件中添加 static-map 配置项。

uWSGI 配置静态文件挂载点

通过 --static-map mountpoint=path 选项,uWSGI 即可将指定请求前缀映射到文件系统上的对应物理目录。

--static-map /images=/var/www/img
复制代码

通过以上配置,如接收到一个对 /images/logo.png 的请求,并且 /var/www/img/logo.png 存在,那么 uWSGI 将会提供它。否则,uWSGI 托管的应用会管理这个请求。

uWSGI 配置路由

nginx 有时另外一个重要作用便是路由, uWSGI 在 1.9 版本后也提供了一个可编程的内部路由子系统,可以通过这个内部路由子系统来动态改变处理请求的方式。

例如将所有的 http 链接转到 https 地址下:

route-uri = ^/$ redirect:https://your.website.com
复制代码

完整配置

通过以上的选项,一个小站便可仅通过 uWSGI 部署起来了,顺便也分享下我的站点配置。

[uwsgi]
; 特权端口只能通过 shared socket 来打开
shared-socket = 0.0.0.0:80
shared-socket = 0.0.0.0:443

; 打开 https 强制转换, 安全协议设置为 HIGH
http-to-https = =0
https = =1,214391966620557.pem,214391966620557.key,HIGH

; 在绑定端口后切换运行用户
uid = ubuntu
gid = ubuntu

; 配置运行虚拟环境及程序路径
virtualenv = /home/ubuntu/.virtualenvs/web/
chdir = /var/web/backend
wsgi-file = backend/wsgi.py
master = true
processes = 2
threads = 4
touch-reload=/var/web/backend/mcenter.reload

; 静态文件和路由配置
static-map = /static=/var/web/backend/static
route-uri = ^/$ redirect:https://your.website.com

; 开启状态监控
stats = 127.0.0.1:9191

复制代码

参考资料

使用uWSGI提供静态文件 uwsgi-docs-zh.readthedocs.io/zh_CN/lates…

uWSGI内部路由 uwsgi-docs-zh.readthedocs.io/zh_CN/lates…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值