2010-10-23 218 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,它很容易調試。幾乎總是有一些已經部署的反向代理,因此只需將其他配置節添加到其配置中以便在幾秒鐘內啓動並運行應用程序,這是小菜一碟。從來沒有用兩種設置測試速度差異,但另一方面,我從來沒有在這方面有任何問題,所以它不會那麼糟糕。