在Go的网络服务器前使用Nginx有什么好处?

时间:2013-07-21 20:29:21

标签: web-services http nginx webserver go

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

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

4 个答案:

答案 0 :(得分:124)

取决于。

开箱即用,将nginx作为反向代理放在前面会给你:

  • 访问日志
  • 错误日志
  • 简易SSL终止
  • SPDY支持
  • gzip支持
  • 为几行中的某些路线设置HTTP标头的简便方法
  • 非常快速的静态资产服务(如果您正在服务S3 /等等,但这不是那么相关)

Go HTTP服务器非常好,但你需要重新发明轮子才能完成其中的一些事情(这很好:它并不意味着每个人都能做到这一切。)

我总是发现将nginx放在前面更容易 - 这就是它擅长的 - 让它做“网络服务器”的东西。我的Go应用程序执行应用程序的东西,只有最少的标题/等。它需要。不要把nginx放在前面作为“坏”的东西。

答案 1 :(得分:17)

Go的标准http服务器很好。如果您的应用程序主要/仅是“动态”请求/响应,那么它确实是最好的方式。

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

如果您需要使用相同的IP地址提供不同的应用程序,nginx是代理在不同应用程序之间分发请求的最佳选择;虽然我经常从工具箱中获取Varnish或HAProxy用于此类事情。

答案 2 :(得分:5)

Gorilla web toolkit为您提供:

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

这填补了Go的net/http和HTTP服务器(如NGINX)之间的差距。

就个人而言,如果我知道我可以插入CDN,我会避免在net/http之上安装和配置另一台HTTP服务器。

我认为net/http在任何标准库中都拥有最强大的HTTP服务器。

答案 3 :(得分:2)

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

logHandler(gzipHandler(fileServer))

他们以一种非常有趣的方式处理错误记录。只要您的中间件返回错误代码(int),错误处理中间件就会自动处理它。他们甚至像Nginx那样在Go中配置整个网站。 “所有Gopher Academy网站的nginx.conf文件超过115行。等效的Caddy文件只有50行。”