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 服务器和开发头文件。如果它们未安装,您将收到错误。如何安装它们取决于您使用的操作系统和包管理器。

创建一个 virtualenv,安装您的应用程序,然后安装 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。您可以编写一个小脚本来导入您的应用程序并使用此名称,或者在使用应用程序工厂模式时创建它。

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