2015-10-14 146 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版本的结果几乎相同。