2010-10-23 104 views
19

目前运行Perl Web应用程序的一个非常流行的选择似乎是在一个nginx web服务器后面代理对FastCGI守护进程或支持PSGI的web服务器(例如Starman)的请求, 。nginx和Perl:FastCGI与反向代理(PSGI/Starman)

已经有很多问题,为什么人会做到这一点,一般(如Why use nginx with Catalyst/Plack/Starman?) 和答案似乎在这两种情况下应用(例如允许nginx的提供静态内容,应用服务器容易重新启动,负载均衡等)

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

  • UNIX域套接字藏汉作为TCP套接字
  • 叉/进程管理器样式服务器藏汉非阻塞基于事件(例如AnyEvent)服务器。
  • 信号处理/优雅重启
  • PSGI

同样,对于任何一个选项nginx的配置非常相似。

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

回答

15

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

  • 东西都有点更容易调试,因为可以很容易地直接打后端服务器;如果你需要扩展你的后端服务器,你可以很容易地在前端(静态服务)HTTP和你的后端之间使用诸如pound/haproxy之类的东西(Zope经常像这样部署)。

  • 它可以是一个很好的伙伴,如果你也使用某种外向,缓存,反向代理(如Varnish或Squid),因为它可以很容易地绕过它。

然而,它具有以下缺点:

  • 后端服务器已经找出真正的原始IP,因为所有这将看到的是前端服务器地址(通常是本地主机);在HTTP头文件中找到客户端IP地址几乎是一种简单的方法,但这是一件额外的事情;

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

  • 前端不能自动产生后端进程,就像它可以用FastCGI做的那样。

挑选您的收藏夹优点/缺点,让你的选择,我想;-)

+11

原始客户端IP地址在X - 转发,对于标题和原始主机头在X-Forwarded-传递传递主机头,所以前两个缺点并不重要。 – marpetr 2013-02-23 14:29:27

+0

+1感谢您的比较。由于可以运行主进程来管理后端进程和线程,因此点3不是问题。您提出了一个有趣的观点,关于Zope以及如何了解原始客户端IP和主机名以构建有效的URL – Viet 2013-05-28 08:20:01

0

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