跳转至

Python uWSGI 安装配置

概念与用途

uWSGI 是可托管 WSGI 应用的应用服务器,常位于 Nginx 后方。它主要面向同步 WSGI 生态,现代 ASGI 应用通常使用 Uvicorn/Hypercorn;Windows 不是 uWSGI 的主要部署平台。

安装与配置

在 Linux 构建环境中执行 python -m pip install uwsgi。典型 INI 指定模块、进程、socket 和退出清理:

[uwsgi]
module = app:application
master = true
processes = 4
http-socket = 127.0.0.1:8000
vacuum = true
die-on-term = true

可运行的最小 app.py:

def application(environ, start_response):
    body = b"Hello from WSGI"
    start_response("200 OK", [("Content-Type", "text/plain"), ("Content-Length", str(len(body)))])
    return [body]

运行依赖与检查

uWSGI 需要 C 编译工具链、Python 开发头文件和类 Unix 环境;版本应固定为团队在目标发行版验证过的版本,例如依赖文件中使用兼容范围并通过镜像构建测试。它不是 Windows 原生开发的首选方案。

from importlib.metadata import PackageNotFoundError, version

try:
    print("uWSGI:", version("uWSGI"))
except PackageNotFoundError:
    print("未安装 uWSGI;请在目标 Linux 构建环境安装")
配置 作用 边界
harakiri 请求执行上限 超时会终止 worker
max-requests 周期回收 worker 缓解长期内存增长
vacuum 退出清理 socket 不能替代正常关停
uid/gid 降低进程权限 启动后切换用户

应用自身还应为数据库和 HTTP 调用配置超时;仅依赖 uWSGI 杀 worker 会中断事务并产生不完整操作。

常见错误与安全注意

  • 不要以 root 运行工作进程,也不要把管理 socket 暴露到不可信网络。
  • 进程数需按内存和负载测试设置,并配置请求超时、日志轮换和优雅退出。
  • uWSGI 协议与 HTTP 不同;Nginx 的代理指令必须与监听类型匹配。