2015-10-14 111 views
3

我已經看過一些questionsnginx的,但我沒有找到任何答案,我的一個。圍棋(郎)應用:nginx的反向代理nginx的VS主機

我認爲(我不是專家)使用nginx作爲net/http go服務器前面的反向代理與使用nginx直接託管go應用程序不同。
如果我錯了,就大聲問我好嗎?

問題出現在我身上,因爲我需要開發一個應用程序(可能只是爲了學習一些新的東西),並且對Web服務器有完全的控制權,特別是在用於回答請求的工作人員數量方面。

所以,來到這裏的問題:

  1. 是否有可能直接主辦的nginx一展身手的應用程序,或者是它nginx的是僅提供靜態文件(如果答案是「否」,則第二個問題沒有多大意義)?

  2. 上述兩種方法之間的主要區別是什麼,確切地說,不同的方法是否會影響配置?

  3. 我很害怕告訴nginx:「好的,請使用8名工作人員,」並且不告訴我們的內部網絡服務器......會發生什麼?

非常感謝你提前

+2

有沒有這樣的事情,「直接託管與Nginx去應用程序」。 – JimB

+0

我不確定您的意思是「在nginx上託管一個應用程序」。 nginx是一個網絡服務器,你的應用程序(根據定義)是一個應用程序。通常的做法是讓你的應用程序在本地端口上監聽(比如說4040),並在它之前設置nginx以將遠程代理從遠程端口80反轉到本地端口4040,以便應用程序處理請求。 –

+0

同樣告訴nginx使用8個工作者意味着有8個工作線程可用來處理JUST反向代理請求。如果您一次收到很多請求可能會有所幫助,但是由於nginx只是在服務(雙關語意)作爲路標,因此可能沒有必要。 Golang的工作人員完全與nginx分開。 –

回答

3

是否有可能直接主辦nginx的一去應用

Nginx的可以用其後端(您的應用程序),通過各種不同的機制進行通信。其中一些是:

  • 通過CGI/FastCGI的(過程複用)
  • 通過HTTP(反向代理)
  • 服務,您的應用程序產生

做不同的方法靜態文件影響配置?

是的,每種情況都有很大的不同。

好,用8名工人,請

這將意味着FastCGI的,我相信這是你的意思是當你說「直接託管在nginx的應用程序」。

什麼都不告訴內部網絡服務器......會發生什麼?

每個Go FastCGI進程都會產生大量的goroutine,它們被多路複用到軟件線程,這些軟件線程被複用到多路複用到CPU核心的硬件線程。

Go的net/http服務器對於生產環境來說已經夠用了,除非你想使用一些nginx特有的功能,否則你不一定需要nginx。只有FastCGI設置有意義的用例非常多。基本上,你只是增加開銷。

+2

另請注意,FastCGI是一個pre-http/1.1文件。 Go的http/1.1服務器比fcgi實現速度更快,效率更高。 – JimB

+0

完美。我認爲我誤解了關係網絡/應用服務器。第一個項目符合清單我清除了我的想法。你能否重新說出「這將表明FastCGI,我相信...」?你的意思是「那會影響......」?謝謝 – affo

+0

我認爲nginx工作者(與您使用的任何後端無關)與FastCGI工作者之間存在一些混淆,而這些工作並不相關。您在nginx中設置的工作者數量完全取決於您的硬件和性能要求,但是將多個nginx工作人員代理到一個Go後端不是問題(它「僅適用於」)。 – elithrar

3

Herbert Fischer寫了一個comprehensive benchmark of Nginx with Go,包括NGinx配置文件和Go代碼。

他檢查了以下設置:

  • 轉到HTTP獨立(對照組)
  • Nginx的代理來訪問HTTP
  • Nginx的FastCGI的以進入TCP的FastCGI
  • Nginx的FastCGI的到去的Unix Socket FastCGI

Go HTTP的Nginx代理是迄今爲止最快的。自1.2版以來,Go版本的結果幾乎相同。