22

如今,运行 Perl Web 应用程序的一个非常流行的选择似乎是在 nginx 网络服务器后面,该服务器将请求代理到 FastCGI 守护程序或启用 PSGI 的网络服务器(例如 Starman)。

有很多关于为什么通常会这样做的问题(例如,为什么将 nginx 与 Catalyst/Plack/Starman 一起使用?),答案似乎适用于两种情况(例如,允许 nginx 提供静态内容,轻松重启应用程序服务器,负载平衡等)

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

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

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

那么为什么你会选择其中之一呢?

4

2 回答 2

17

反向代理设置(例如 nginx 将 HTTP 请求转发到 Starman)具有以下优点:

  • 调试起来更容易一些,因为您可以轻松地直接访问后端服务器;

  • 如果你需要扩展你的后端服务器,你可以很容易地在前端(静态服务)HTTP 和你的后端之间使用类似 pound/haproxy 的东西(Zope 通常是这样部署的);

  • 如果您还使用某种面向外部的、缓存的、反向代理(如 Varnish 或 Squid),它可能是一个不错的伙伴,因为它可以很容易地绕过它。

但是,它有以下缺点:

  • 后端服务器必须找出真正的原始 IP,因为它所看到的只是前端服务器地址(通常是 localhost);几乎有一种简单的方法可以在 HTTP 标头中找出客户端 IP 地址,但要弄清楚这一点是额外的;

  • 后端服务器通常不知道原始的“Host:” HTTP 头,因此无法自动生成本地资源的绝对 URL;Zope 使用特殊的 URL 来解决这个问题,将原始协议、主机和端口嵌入到后端的请求中,但这与 FastCGI/Plack/... 无关;

  • 前端不能像 FastCGI 那样自动生成后端进程。

选择你最喜欢的优点/缺点并做出你的选择,我猜;-)

于 2011-03-04T23:34:42.397 回答
1

大多数系统管理员都非常了解 HTTP,而且它很容易调试。几乎总是已经部署了某种反向代理,因此只需将另一个配置节添加到其配置中以便在几秒钟内启动并运行您的应用程序是小菜一碟。从来没有测试过这两种设置的速度差异,但另一方面我在那个区域从来没有遇到过任何问题,所以它不会那么糟糕。

于 2010-12-17T11:31:24.023 回答