我已经阅读了一些questions关于 go 和 nginx 的内容,但我没有找到任何答案。
我认为(我不是专家)在net/http
go服务器前使用nginx作为反向代理与使用nginx直接托管你的应用程序是不同的。
如果我错了,请大声喊叫,好吗?
问题出现在我面前,因为我需要开发一个应用程序(可能带有go,只是为了学习新东西),并且可以完全控制Web服务器,特别是它用于回答请求的工作者数量。
所以,问题就出现了:
是否有可能直接在nginx上托管一个go app,或者它是仅提供静态文件的nginx(如果答案是“NO”,那么第二个问题没有多大意义)?
上述两种方法之间的主要区别是,不同的方法是否会影响配置?
我害怕告诉nginx:“好的,请使用8名工作人员”并告诉他们内部的网络服务器......会发生什么?
非常感谢你提前
答案 0 :(得分:5)
Herbert Fischer写了comprehensive benchmark of Nginx with Go,包括NGinx配置文件和Go代码。
他检查了以下设置:
到目前为止,Go HTTP的Nginx代理是最快的。自1.2以来,Go版本的结果几乎相同。
答案 1 :(得分:3)
是否可以直接在nginx上托管go app
Nginx可以通过各种不同的机制与其后端(您的应用程序)进行通信。其中一些是:
不同的方法是否会影响配置?
是的,每个案例都非常不同。
好的,请使用8名工人
这会建议FastCGI,我相信当你说“直接在nginx上托管应用程序”时你的意思。
告诉任何事情不要去内部网络服务器......会发生什么?
每个Go FastCGI进程都会产生许多goroutine,这些goroutine被多路复用到软件线程,软件线程被多路复用到硬件线程,硬件线程被多路复用到CPU核心。
Go net/http
服务器对于生产环境来说已经足够了,除非你想使用某些特定于nginx的功能,否则你不一定需要nginx。只有这么多用例,FastCGI设置才有意义。你只是增加了开销。