在生产中使用 Sanic 的内置网络服务器

blu*_*ray 1 python deployment python-3.x server sanic

Django文档说明了关于他们的开发服务器:

不要在任何类似于生产环境的地方使用这个服务器。它仅供在开发时使用。(我们的工作是制作 Web 框架,而不是 Web 服务器。)

Sanic 的部署文档并没有说我们不能在生产中使用它内置的服务器。它指出:

使用以下三个选项之一部署 Sanic 非常简单:内置网络服务器、ASGI 网络服务器或 gunicorn。将 Sanic 放在反向代理之后也很常见,比如 nginx。

对我来说,这意味着摆脱 Apache 的束缚。这也意味着 Nginx、Gunicorn、Daphne、Uvicorn、Hypercorn 等都是可选的。

但是,我发现了一些关于其在Sanic 中的内置服务器的负面评论:python web server that's write to die fast。另一方面,他们的 github 存储库似乎非常活跃。他们是否解决了 Reddit 帖子中提到的问题?

我错过了什么吗?

L. *_*nen 5

问题 1 处理请求大小和超时设置,这些设置允许通过用过多数据淹没服务器来进行 DoS 攻击。这些设置可以由管理员根据服务器硬件和正在运行的站点的要求进行调整。话虽如此,默认值可能应该低于它们,以使对未配置服务器的此类攻击更加困难。

问题 2 声称在流响应中没有背压处理。当前版本确实有流量控制,因此得到了适当的背压控制,避免了此类问题。由于这在 Python 的 asyncio 协议设计中被严重忽视,因此过去很多应用程序都存在此类问题,想必也包括写博客时的 Sanic。

就像现在一样,Sanic 服务器当然可以直接在 Internet 上运行,事实上,这比在 nginx 或 Apache 后面运行 Django 更安全,因为任何持久的 POST 请求都会阻止整个 Django 工作线程。