Perl 为什么要将nginx与Catalyst/Plack/Starman一起使用?
我正在尝试使用Plack/Starman部署我的小Catalyst web应用程序。所有文档似乎都建议我将其与nginx结合使用。这有什么好处?为什么不在端口80上直接使用Starman?它不一定非得是nginx,但出于以下几个原因,您需要某种前端服务器代理到您的应用程序服务器: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的任何类
另一个原因是,轻量级前端服务器(即使Apache也可以)每次连接消耗的内存比典型的Starman进程少(几MB,而不是几十MB或超过100 MB)。由于连接已打开一段时间,特别是如果您想使用保持活动状态的连接,您可以用更少的RAM支持大量同时连接。仅确保代理前端服务器的缓冲区大小足以立即从后端加载典型的HTTP响应。然后后端可以自由处理下一个请求。我有一个后续问题,霍布斯:如果您使用的是Dancer或Catalyst之类的框架,那么为什么需要starman?难道你不能将请求发送到Plack/Dancer提供的默认服务器吗?@Vijay是Dancer使用的默认服务器,如果你运行服务器脚本时没有
-f
或-k
选项,那么一次只能处理一个请求,因此对生产来说不是很好。另一方面,如果您使用-f
运行Catalyst服务器脚本,它使用的是Starman:)啊,太棒了!这终于澄清了我想理解的最后一件事。我在这里写下了我对nginx/starman/dancer堆栈的解释(如果您有我遗漏的任何其他评论/见解,我将非常感谢):