我正在编写一些返回 JSON 数据的 Web 服务,这些数据有很多用户。
与仅使用 go http 服务器相比,在我的服务器前端使用 Nginx 有什么好处?
我正在编写一些返回 JSON 数据的 Web 服务,这些数据有很多用户。
与仅使用 go http 服务器相比,在我的服务器前端使用 Nginx 有什么好处?
这取决于。
开箱即用,将 nginx 作为反向代理放在前面将为您提供:
Go HTTP 服务器非常好,但是你需要重新发明轮子来做这些事情(这很好:它并不意味着对每个人都适用)。
我总是发现把 nginx 放在前面更容易——这是它擅长的——让它做“网络服务器”的事情。我的 Go 应用程序执行应用程序的内容,并且只有极少的标头/等。它需要。不要将 nginx 放在前面视为“坏”的事情。
Go 的标准 http 服务器很好。如果您的应用程序主要/仅是“动态”请求/响应,那么这确实是最好的方法。
您可以使用 nginx 来提供静态资产,但很可能标准的 Go 也可以。如果您需要更高的性能,您应该尽可能多地使用 CDN 或缓存(例如)。
如果您需要通过相同的 IP 地址为不同的应用程序提供服务,那么 nginx 是代理在不同应用程序之间分发请求的最佳选择;尽管我更经常将 Varnish 或 HAProxy 从工具箱中取出来处理这类事情。
Gorilla 网络工具包为您提供:
schema
包将表单值转换为结构。这填补了 Gonet/http
和 HTTP 服务器(如 NGINX)之间的许多空白。
net/http
就个人而言,如果我知道我可以插入 CDN ,我会避免安装和配置另一个 HTTP 服务器。
我认为net/http
拥有任何标准库中最强大的 HTTP 服务器。
从https://blog.gopheracademy.com/caddy-a-look-inside/看来,Go 可以使用中间件处理 gzip、错误、静态文件、路由和 http 标头。来自博客的下面一行显示了您将如何处理此类请求。
logHandler(gzipHandler(fileServer))
他们以一种非常有趣的方式处理错误日志。只要您的中间件返回错误代码 (int),错误处理中间件就会自动处理它。他们甚至已经像 Nginx 一样在 Go 中配置整个站点。“所有 Gopher Academy 网站的 nginx.conf 文件都超过 115 行。等效的 Caddyfile 只有 50 行。”