我正在写一些返回JSON数据的webservices,这些数据有很多用户。
与使用go http服务器相比,在我的服务器前使用Nginx有什么好处?
答案 0 :(得分:124)
取决于。
开箱即用,将nginx作为反向代理放在前面会给你:
Go HTTP服务器非常好,但你将需要重新发明轮子才能完成其中的一些事情(这很好:它并不意味着每个人都能做到这一切。)
我总是发现将nginx放在前面更容易 - 这就是它擅长的 - 让它做“网络服务器”的东西。我的Go应用程序执行应用程序的东西,只有最少的标题/等。它需要。不要把nginx放在前面作为“坏”的东西。
答案 1 :(得分:17)
Go的标准http服务器很好。如果您的应用程序主要/仅是“动态”请求/响应,那么它确实是最好的方式。
你可以使用nginx来提供静态资产,但很可能标准的Go也可以。如果您需要更高的性能,您应该尽可能多地使用CDN或缓存(例如)。
如果您需要使用相同的IP地址提供不同的应用程序,nginx是代理在不同应用程序之间分发请求的最佳选择;虽然我经常从工具箱中获取Varnish或HAProxy用于此类事情。
答案 2 :(得分:5)
Gorilla web toolkit为您提供:
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行。”