在用于Go的Web服务器前使用Nginx有什么好处?[关闭]


84

我正在编写一些返回JSON数据的Web服务,这些用户有很多用户。

与仅使用go http服务器相比,在服务器前端使用Nginx有什么好处?


fyi,存在很多tcp错误,例如,对等方重置了连接,以及使用Go http服务器处理服务每分钟处理100个大型POST请求的I / O超时。将nginx放在它前面-不再有问题。
彼得·凯利

最终,我决定使用不带NGINX的Go http服务器,并且效果很好。我没有遇到任何问题。但是我的服务没有像您这样运行大型POST请求。
Daniele B

20
这不一定基于观点。照此结束,表明对这些问题的答案可能会填补并提供的考虑事项和注意事项严重缺乏了解。选择的答案就是一个很好的例子。实际上,我在所有提供的答案中都看到了相关的新注意事项。
vee_ess '16

Answers:


135

这取决于。

开箱即用,将nginx放在前面作为反向代理将为您提供:

  • 访问日志
  • 错误日志
  • 轻松终止SSL
  • SPDY支持
  • gzip支持
  • 在几行中为某些路由设置HTTP标头的简单方法
  • 非常快速的静态资产服务(但是,如果您要使用S3 / etc等服务,则无关紧要)

转到HTTP服务器是非常好的,但你需要推倒重来做一些事情(这是罚款:它并不意味着所有人的所有需要)。

我总是发现将nginx放在前面是一件容易的事,这是它的优势所在,然后让它做“ Web服务器”工作。我的Go应用程序执行应用程序的工作,并且仅执行最少的headers / etc。它需要的。不要将nginx放在前面是“坏”的事情。


感谢您的回复!-1)Go HTTP会产生某种日志吗?-2)Nginx是否会以某种方式降低请求/响应的吞吐量?
Daniele B

3
@DanieleB Go HTTP服务器仅生成您想要的日志(即使用log程序包)。如果要记录IP地址,资源访问等信息,则需要编写该信息。除了基础知识之外,设置标题也是如此。尽管我没有任何具体数据,但是Go前面的nginx确实不应该慢于Go:实际上,由于gzip及其自身的优化,它可能会更快。“成本”将是更多的内存/ CPU使用率,但是nginx在这方面也非常有效。
elithrar

16
一项更大的功能:如何升级/维护您的应用程序(当它关闭时不会丢包)?Nginx将让您引导流量,而不会丢失数据包。
BraveNewCurrency

+ 1,Nginx处于自己的位置。
Anatoly 2014年

3
在我的Raspberry Pi上,将Nginx放在Go前面可以大大提高页面加载速度。
425nesp

17

Go的标准http服务器很好。如果您的应用程序大部分/仅是“动态”请求/响应,那么这实际上是最好的方法。

您可以使用nginx来提供静态资产,但是最有可能的是,标准Go one也可以。如果您需要更高的性能,则应使用CDN或尽可能多地使用Varnish(例如)来缓存。

如果您需要使用相同的IP地址为不同的应用程序提供服务,那么nginx是代理在不同应用程序之间分发请求的理想选择。尽管我更经常将Varnish或HAProxy从此类工具箱中删除。


是的,我实际上仅将其用于提供动态数据。所以,我想我那时不需要NGINX!感谢您的回复
Daniele B

不需要Varnish / HAProxy,Nginx具有用于缓存和负载平衡的类似工具集。
Anatoly 2014年

@mikhailov不是我所说的吗?nginx很好地工作了;虽然我个人通常更喜欢使用Varnish或HAproxy。我发现它们更易于配置和操作。
问比约恩·汉森

5

大猩猩Web工具包为您提供:

  • 高级路由(域/子域限制,正则表达式路径匹配)。
  • gzip支持(通过中间件处理程序。)
  • 以Apache Common Log Format输出的日志中间件处理程序。
  • 保护加密的cookie。
  • 会议。
  • schema 包将表单值转换为结构。

这填补了Gonet/http和HTTP服务器(如NGINX)之间的巨大空白。

就我个人而言,net/http如果我知道可以插入CDN的话,我会避免安装和配置其他HTTP服务器。

我认为net/http它是所有标准库中功能最强大的HTTP服务器。


2

https://blog.gopheracademy.com/caddy-a-look-inside/看来,Go可以使用中间件处理gzip,错误,静态文件,路由和http标头。博客中的以下行显示了如何处理此类请求。

logHandler(gzipHandler(fileServer))

他们以一种非常有趣的方式处理错误日志。只要您的中间件返回错误代码(int),错误处理中间件就会自动对其进行处理。他们甚至可以像Nginx一样在Go中配置整个站点。“所有Gopher学院网站的nginx.conf文件都超过115行。等效的Caddyfile只有50行。”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.