mod_wsgi

mod_wsgi 是一个与 Apache httpd 服务器集成的 WSGI 服务器。现代的 mod_wsgi-express 命令可以轻松配置和启动服务器,而无需更改 Apache httpd 配置文件。

  • 与 Apache httpd 紧密集成。

  • 直接支持 Windows。

  • 安装时需要编译器和 Apache 的开发头文件。

  • 不需要配置反向代理。

本页介绍如何运行 mod_wsgi-express 的基础内容,不包括更复杂的 httpd 安装和配置。请务必阅读 mod_wsgi-expressmod_wsgiApache httpd 的官方文档,以了解支持的功能。

安装

安装 mod_wsgi 需要系统中已安装编译器和 Apache 的服务器及开发头文件。 如果缺失,会在安装时出现错误。具体安装方式取决于你使用的操作系统和包管理器。

创建一个虚拟环境,安装你的应用,然后安装 mod_wsgi

$ cd hello-app
$ python -m venv .venv
$ . .venv/bin/activate
$ pip install .  # install your application
$ pip install mod_wsgi

运行

mod_wsgi-express 的唯一参数是一个包含你的 Flask 应用的脚本,该脚本中必须有一个名为 application 的对象。 如果你使用了应用工厂模式,可以写一个简单的脚本来导入或创建这个 application 对象。

wsgi.py
from hello import app

application = app
wsgi.py
from hello import create_app

application = create_app()

然后运行 mod_wsgi-express start-server 命令。

$ mod_wsgi-express start-server wsgi.py --processes 4

--processes 选项指定要运行的工作进程数量,初始值可以设为 CPU * 2

请求日志不会在终端中显示。若出现错误,相关信息会写入启动服务器时显示的错误日志文件中。

外部绑定

与本手册中的其他 WSGI 服务器不同,mod_wsgi 可以以 root 身份运行,从而绑定到 80 和 443 等特权端口。 但它必须配置为在启动后将工作进程的权限降级为其他用户和用户组。

例如,如果你创建了一个 hello 用户和用户组, 你应以该用户身份安装 virtualenv 和应用程序,并告诉 mod_wsgi 在启动后切换到该用户权限运行。

$ sudo /home/hello/.venv/bin/mod_wsgi-express start-server \
    /home/hello/wsgi.py \
    --user hello --group hello --port 80 --processes 4