目前,运行Perl Web应用程序的一个非常流行的选择似乎是nginx webserver代理对FastCGI守护程序或启用PSGI的Web服务器(例如Starman)的请求。
为什么一般会这样做会有很多疑问(例如Why use nginx with Catalyst/Plack/Starman?) 并且答案似乎适用于这两种情况(例如,允许nginx提供静态内容,轻松重启应用程序服务器,负载平衡等)。
但是,我对使用FastCGI与反向代理方法的优缺点特别感兴趣。似乎Starman被广泛认为是最快和最好的Perl PSGI应用程序/网络服务器,我很难看到使用FastCGI的任何优势。这两种方法似乎都支持:
同样,任一选项的nginx配置都非常相似。
那么为什么你会选择一个呢?
答案 0 :(得分:15)
反向代理设置(例如nginx向Starman转发HTTP请求)具有以下优点:
事情更容易调试,因为您可以轻松直接命中后端服务器;
如果您需要扩展后端服务器,可以在前端(静态服务)HTTP和后端之间轻松使用pound / haproxy之类的东西(Zope通常像这样部署);
< / LI>如果您还使用某种面向外部的缓存,反向代理(如Varnish或Squid),它可能是一个不错的搭档,因为它可以很容易地绕过它。
但是,它有以下缺点:
后端服务器必须找出真正的原始IP,因为它只会看到前端服务器地址(通常是localhost);几乎有一种简单的方法可以找到HTTP标头中的客户端IP地址,但这还有一些额外的东西可以解决;
后端服务器通常不知道orignal“Host:”HTTP头,因此无法自动生成本地资源的绝对URL; Zope使用特殊URL解决这个问题,将请求中的原始协议,主机和端口嵌入到后端,但这与FastCGI / Plack /...;
前端不能自动生成后端进程,就像它可以用FastCGI那样。
选择你喜欢的优点/缺点并做出你的选择,我想; - )
答案 1 :(得分:0)
大多数系统管理员都很好地理解HTTP,它很容易调试。几乎总是已经部署了某种反向代理,所以只需在其配置中添加另一个配置节,以便在几秒钟内启动并运行您的应用程序,这是一块蛋糕。从来没有测试过两种设置的速度差异,但另一方面我从来没有遇到任何问题,所以它不会那么糟糕。