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 前使用反向代理,如 nginx 或 Apache httpd。
如不指定 --host 选项,服务器将绑定到所有外部 IP 上的非特权端口。 但在使用反向代理的情况下不要这样做,否则可能会绕过代理访问。
注意:0.0.0.0 不是一个可以在浏览器中访问的有效地址,浏览器中应使用具体的 IP 地址。