Go(golang)webservices的Webserver:使用NGINX还是不?
我正在写一些webservices返回JSON数据,有很多的用户。
你会推荐使用NGINX作为networking服务器还是使用Go的标准HTTP服务器?
这取决于。
开箱即用,将nginx作为反向代理放在前面会给你:
- 访问日志
- 错误日志
- 简单的SSL终止
- SPDY支持
- gzip支持
- 简单的方法可以在几行中为特定的路由设置HTTP标头
- 非常快速的静态资产服务(如果你服务于S3 / etc,但这不是相关的)
Go HTTP服务器是非常好的,但是你需要重新发明这些东西(这很好:它不是为了所有人)。
我总是发现把nginx放在前面更容易 – 这是它擅长的 – 并让它做“web服务器”的东西。 我去应用程序做的应用程序的东西,只有最低限度的头/等。 它需要。 不要把nginx作为一个“坏”的东西放在前面。
Go的标准http服务器没问题。 如果你的应用程序大部分/只是“dynamic的”请求/响应,那么它确实是最好的方法。
您可以使用nginx来提供静态资产,但最有可能的是,标准的Go也可以。 如果您需要更高的性能,您应该尽可能使用CDN或caching(例如)。
如果您需要使用相同的IP地址提供不同的应用程序,nginx是代理在不同应用程序之间分配请求的不错select; 尽pipe我更经常从工具箱中获得清漆或HAProxy。
大猩猩networking工具包给你:
- 高级路由(域/子域限制,正则expression式path匹配)。
- gzip支持(通过中间件处理程序 )
- logging以Apache公共日志格式输出的中间件处理程序。
- 保护encryption的cookie。
- 会话。
-
schema
包将表单值转换为结构体。
这填补了Go的net/http
和HTTP服务器(如NGINX)之间的很大差距。
就个人而言,如果我知道我可以插入一个CDN,我会避免安装和configurationnet/http
上的另一个HTTP服务器。
我认为net/http
是任何标准库中function最强大的HTTP服务器。
从https://blog.gopheracademy.com/caddy-a-look-inside/它看起来像Go可以使用中间件来处理gzip,错误,静态文件,路由和http头。; 从博客下面的行显示你将如何处理这样的请求。
logHandler(gzipHandler(fileServer))
他们以一种非常有趣的方式处理错误日志。 只要中间件返回一个错误代码(int),error handling中间件就会自动处理它。 他们甚至像Nginx一样去configuration整个网站。 “所有Gopher学院网站的nginx.conf文件长度超过115行,等效的Caddyfile只有50行。”