2010-05-30 62 views

回答

34

它不必是特別nginx的,但你要某種前端服務器代理到您的應用程序服務器的幾個原因:

  1. 這樣就可以在運行服務器的催化劑高端口,作爲普通用戶,同時在端口80上運行前端服務器。

  2. 要爲靜態文件(像圖像,JS和CSS等普通資源以及任何類型的下載,您可能想要使用X - 發送文件或X-Accel-Redirect),而無需在下載期間綁定perl進程。

  3. 如果您想要轉向更復雜的配置,例如, Edge Side包括或讓web服務器直接從memcached或mogilefs(nginx可以執行的任何操作)或負載平衡/ HA配置中提供服務。

+0

我有一個後續問題,霍布斯:如果你使用的是一個框架,比如舞者或者催化劑,你爲什麼需要斯塔曼呢?你不能只將請求發送到Plack/Dancer提供的默認服務器嗎? – 2012-08-27 04:22:34

+2

@Vijay Dancer使用的默認服務器,如果您運行服務器腳本而沒有使用'-f'或'-k'選項,則Catalyst一次只能處理一個請求,所以它對於生產來說並不好。另一方面,如果你用'-f'運行Catalyst服務器腳本,它使用的是Starman :) – hobbs 2012-08-27 04:27:21

+1

啊,非常棒!這終於清除了我試圖理解的最後一件事。我在這裏寫下了我對nginx/starman/dancer堆棧的解釋(如果你有任何額外的評論/見解,我錯過了,我真的很感激他們):http://stackoverflow.com/questions/12127566/an-explanation -of最nginx的-接龍舞者 - 網絡堆棧 – 2012-08-27 04:34:55

9

我問上#plack這個問題,並得到了@nothingmuch以下響應(我加了格式化):

nginx的,你可以設置 負載平衡/故障轉移類型的東西。如果 該網站很小/簡單,它可能是 矯枉過正。

我不知道任何 缺點斯塔曼可能有。 也許如果你有很多點擊 靜態文件nginx將使用較少的 cpu /內存來處理它們,但它的 不會在 典型的Web應用程序中顯着。儘管如此,大量下載可能會將Starman工作人員捆綁在靜態文件 下。 (也許不是,用 sendfile。)這就是我所能想象到的所有我 。

...如果您想要在沒有停機時間的情況下升級 ,故障轉移設置可以很好,因爲 會很好。 (「失敗」老 版本。)

3

另一個原因是一個輕量級前端服務器(即使Apache是​​OK)消耗每個連接比典型的接龍過程更少的內存(幾MB的與幾十或超過100 MB)。由於連接已打開一段時間,特別是如果要使用保持連接的連接,可以使用更少的RAM來支持大量的同時連接。只有確保代理前端服務器的緩衝區大小足夠大才能立即從後端加載典型的HTTP響應。然後後端可以自由處理下一個請求。

相關問題