Go(lang)app:nginx反向代理VS nginx主机

时间:2015-10-14 13:32:53

标签: nginx go

我已经阅读了一些questions关于 go nginx 的内容,但我没有找到任何答案。

我认为(我不是专家)在net/http go服务器前使用nginx作为反向代理与使用nginx直接托管你的应用程序是不同的。
如果我错了,请大声喊叫,好吗?

问题出现在我面前,因为我需要开发一个应用程序(可能带有go,只是为了学习新东西),并且可以完全控制Web服务器,特别是它用于回答请求的工作者数量。

所以,问题就出现了:

  1. 是否有可能直接在nginx上托管一个go app,或者它是仅提供静态文件的nginx(如果答案是“NO”,那么第二个问题没有多大意义)?

  2. 上述两种方法之间的主要区别是,不同的方法是否会影响配置?

  3. 我害怕告诉nginx:“好的,请使用8名工作人员”并告诉他们内部的网络服务器......会发生什么?

  4. 非常感谢你提前

2 个答案:

答案 0 :(得分:5)

Herbert Fischer写了comprehensive benchmark of Nginx with Go,包括NGinx配置文件和Go代码。

他检查了以下设置:

  • 单独使用HTTP(作为控制组)
  • Nginx代理到Go HTTP
  • Nginx fastcgi to Go TCP FastCGI
  • Nginx fastcgi to Go Unix Socket FastCGI

到目前为止,Go HTTP的Nginx代理是最快的。自1.2以来,Go版本的结果几乎相同。

答案 1 :(得分:3)

  

是否可以直接在nginx上托管go app

Nginx可以通过各种不同的机制与其后端(您的应用程序)进行通信。其中一些是:

  • 通过CGI / FastCGI(过程多路复用)
  • 通过HTTP(反向代理)
  • 提供应用制作的静态文件
  

不同的方法是否会影响配置?

是的,每个案例都非常不同。

  

好的,请使用8名工人

这会建议FastCGI,我相信当你说“直接在nginx上托管应用程序”时你的意思。

  

告诉任何事情不要去内部网络服务器......会发生什么?

每个Go FastCGI进程都会产生许多goroutine,这些goroutine被多路复用到软件线程,软件线程被多路复用到硬件线程,硬件线程被多路复用到CPU核心。

Go net/http服务器对于生产环境来说已经足够了,除非你想使用某些特定于nginx的功能,否则你不一定需要nginx。只有这么多用例,FastCGI设置才有意义。你只是增加了开销。