Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么要将nginx与Catalyst/Plack/Starman一起使用?_Perl_Nginx_Catalyst_Plack_Starman - Fatal编程技术网

Perl 为什么要将nginx与Catalyst/Plack/Starman一起使用?

Perl 为什么要将nginx与Catalyst/Plack/Starman一起使用?,perl,nginx,catalyst,plack,starman,Perl,Nginx,Catalyst,Plack,Starman,我正在尝试使用Plack/Starman部署我的小Catalyst web应用程序。所有文档似乎都建议我将其与nginx结合使用。这有什么好处?为什么不在端口80上直接使用Starman?它不一定非得是nginx,但出于以下几个原因,您需要某种前端服务器代理到您的应用程序服务器: 因此,您可以作为普通用户在高端口上运行Catalyst服务器,同时在端口80上运行前端服务器 提供静态文件(图像、JS和CSS等普通资源,以及您可能希望使用X-Sendfile或X-Accel-Redirect的任何类

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

它不一定非得是nginx,但出于以下几个原因,您需要某种前端服务器代理到您的应用程序服务器:

  • 因此,您可以作为普通用户在高端口上运行Catalyst服务器,同时在端口80上运行前端服务器

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

  • 如果您希望转到更复杂的配置,例如边缘包含,或让Web服务器直接从memcached或mogilefs(nginx可以做这两件事),或负载平衡/HA配置,这会使事情变得更容易

  • 我在plack上问了这个问题,得到了@nothingmuch的以下回复(我添加了格式):

    使用nginx,您可以设置 负载平衡/故障转移类型的东西。如果 这个网站很小/很简单,可能是这样 太过分了

    我什么都不知道 斯塔曼可能有缺点。 也许如果你有很多关于 nginx将使用更少的静态文件 cpu/内存来处理它们,但是 不太可能在一个特定的环境中有重大意义 典型的网络应用。大量下载可能会 为静态文件绑定Starman工作人员 不过下载。(也许不是,但是 这就是我所能做的 想一想

    …故障转移设置可以 如果你想升级的话,那就好了 没有停机时间。(“失败”的老人 版本。)


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

    我有一个后续问题,霍布斯:如果您使用的是Dancer或Catalyst之类的框架,那么为什么需要starman?难道你不能将请求发送到Plack/Dancer提供的默认服务器吗?@Vijay是Dancer使用的默认服务器,如果你运行服务器脚本时没有
    -f
    -k
    选项,那么一次只能处理一个请求,因此对生产来说不是很好。另一方面,如果您使用
    -f
    运行Catalyst服务器脚本,它使用的是Starman:)啊,太棒了!这终于澄清了我想理解的最后一件事。我在这里写下了我对nginx/starman/dancer堆栈的解释(如果您有我遗漏的任何其他评论/见解,我将非常感谢):