Waitress

Waitress 是一个纯 Python 编写的 WSGI 服务器。

  • 配置简单。

  • 原生支持 Windows。

  • 安装便捷,无需额外依赖或编译过程。

  • 不支持流式请求,所有请求数据都会被完整缓冲。

  • 使用单进程 + 多线程工作模型。

本页介绍了运行 Waitress 的基本方法。请阅读其官方文档以及执行 waitress-serve --help 以了解可用功能。

安装

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

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

运行

waitress-serve 的唯一必需参数用于指定如何加载你的 Flask 应用。语法为 {模块}:{应用}。 其中 模块 是应用所在模块的导入路径,应用 是你的 Flask 应用对象的变量名。 如果你使用的是应用工厂模式(app factory pattern),则使用 --call {模块}:{工厂函数} 语法。

# equivalent to 'from hello import app'
$ waitress-serve --host 127.0.0.1 hello:app

# equivalent to 'from hello import create_app; create_app()'
$ waitress-serve --host 127.0.0.1 --call hello:create_app

Serving on http://127.0.0.1:8080

--host 选项默认只将服务器绑定到本地 127.0.0.1

每个请求的日志不会显示,只有错误会被记录。日志记录可以通过 Python 接口配置,而不是通过命令行。

外部绑定

不应以 root 身份运行 Waitress,因为这会导致你的应用代码以 root 权限执行,存在安全隐患。 不过,这也会导致无法绑定到 80 或 443 等特权端口。推荐在 Waitress 前使用反向代理,如 nginxApache httpd

如不指定 --host 选项,服务器将绑定到所有外部 IP 上的非特权端口。 但在使用反向代理的情况下不要这样做,否则可能会绕过代理访问。

注意:0.0.0.0 不是一个可以在浏览器中访问的有效地址,浏览器中应使用具体的 IP 地址。