nginx和Perl:FastCGI与反向代理(PSGI / Starman)

时间:2010-10-23 11:20:50

标签: perl nginx fastcgi reverse-proxy plack

目前,运行Perl Web应用程序的一个非常流行的选择似乎是nginx webserver代理对FastCGI守护程序或启用PSGI的Web服务器(例如Starman)的请求。

为什么一般会这样做会有很多疑问(例如Why use nginx with Catalyst/Plack/Starman?) 并且答案似乎适用于这两种情况(例如,允许nginx提供静态内容,轻松重启应用程序服务器,负载平衡等)。

但是,我对使用FastCGI与反向代理方法的优缺点特别感兴趣。似乎Starman被广泛认为是最快和最好的Perl PSGI应用程序/网络服务器,我很难看到使用FastCGI的任何优势。这两种方法似乎都支持:

  • UNIX域套接字以及TCP套接字
  • fork / process manager样式服务器以及非阻塞基于事件的(例如AnyEvent)服务器。
  • 信号处理/正常重启
  • PSGI

同样,任一选项的nginx配置都非常相似。

那么为什么你会选择一个呢?

2 个答案:

答案 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,它很容易调试。几乎总是已经部署了某种反向代理,所以只需在其配置中添加另一个配置节,以便在几秒钟内启动并运行您的应用程序,这是一块蛋糕。从来没有测试过两种设置的速度差异,但另一方面我从来没有遇到任何问题,所以它不会那么糟糕。