为什么在Catalyst / Plack / Starman中使用nginx?

时间:2010-05-30 16:13:24

标签: perl nginx catalyst plack starman

我正在尝试使用Plack / Starman部署我的小型Catalyst Web应用程序。所有文档似乎都表明我想将它与nginx结合使用。这有什么好处?为什么不直接在端口80上使用Starman?

3 个答案:

答案 0 :(得分:38)

它不一定特别是nginx,但是你需要某种前端服务器代理你的应用服务器,原因如下:

  1. 这样您就可以在普通用户的高端口上运行Catalyst服务器,同时在端口80上运行前端服务器。

  2. 提供静态文件(普通资源,如图像,JS和CSS,以及任何类型的下载,您可能希望使用X-Sendfile或X-Accel-Redirect),而不会占用perl进程在下载期间。

  3. 如果您希望转到更复杂的配置,例如边缘包括,或者让web服务器直接从memcached或mogilefs(nginx可以做的事情)或负载平衡/ HA配置服务。

答案 1 :(得分:9)

我在#plack上问了这个问题并从@nothingmuch得到了以下回复(我添加了格式化):

  

使用nginx可以设置   负载均衡/故障转移类型的东西。如果   该网站可能很小/很简单   矫枉过正。

     

我不知道   Starman可能有的缺点。   也许如果你有很多点击率   静态文件nginx会少用   用于处理它们的CPU /内存,但它是   不太可能是重要的   典型的网络应用。大量下载可能   将Starman worker绑定为静态文件   下载虽然。 (也许不是,有   sendfile。)这就是我能做的一切   考虑到。

     

...故障转移设置可以   如果你想进行升级,那就太好了   没有停机时间。 (“失败”旧   版本)。

答案 2 :(得分:3)

另一个原因是,轻量级前端服务器(甚至是Apache可以)比典型的Starman进程(几MB到几十或超过100 MB)每个连接消耗的内存要少得多。由于连接已打开一段时间,特别是如果您想使用保持活动连接,您可以使用更少的RAM来支持大量的同时连接。仅确保代理前端服务器的缓冲区大小足以从后端立即加载典型的HTTP响应。然后后端可以自由处理下一个请求。