我正在尝试使用 Plack/Starman 部署我的小型 Catalyst Web 应用程序。所有文档似乎都建议我想将它与 nginx 结合使用。这样做有什么好处?为什么不在端口 80 上直接使用 Starman?
3 回答
它不必特别是 nginx,但出于以下几个原因,您希望某种前端服务器代理到您的应用程序服务器:
这样您就可以像普通用户一样在高端口上运行 Catalyst 服务器,而在端口 80 上运行前端服务器。
提供静态文件(图像、JS 和 CSS 等普通资源,以及您可能希望使用 X-Sendfile 或 X-Accel-Redirect 的任何类型的下载),而无需在下载期间占用 perl 进程.
如果您想继续进行更复杂的配置,例如 Edge Side Includes,或者让网络服务器直接从 memcached 或 mogilefs(nginx 可以做的事情)或负载平衡/ HA 配置中提供服务,这会使事情变得更容易。
我在#plack 上问了这个问题,并得到了@nothingmuch 的以下回复(我添加了格式):
使用 nginx,您可以设置负载平衡/故障转移类型的东西。如果网站很小/很简单,那可能是矫枉过正。
我不知道 Starman 可能有什么缺点。也许如果您对静态文件有很多点击,nginx 会使用更少的 cpu/内存来处理它们,但在典型的 web 应用程序中它不太可能很重要。不过,大量下载可能会束缚 Starman 工作人员的静态文件下载。(也许不是,使用 sendfile。)这就是我能想到的。
...如果您想在不停机的情况下进行升级,故障转移设置可能会很好。(“失败”旧版本。)
另一个原因是,与典型的 Starman 进程相比,轻量级前端服务器(甚至 Apache 也可以)每个连接消耗的内存要少得多(几 MB 与几十或超过 100 MB)。由于连接打开了一段时间,特别是如果您想使用保持活动连接,您可以用更少的 RAM 支持大量同时连接。只需确保代理前端服务器的缓冲区大小足以立即从后端加载典型的 HTTP 响应。然后后端可以自由处理下一个请求。