95

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

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

4

4 回答 4

146

这取决于。

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

  • 访问日志
  • 错误日志
  • 轻松终止 SSL
  • SPDY 支持
  • gzip 支持
  • 在几行中为某些路由设置 HTTP 标头的简单方法
  • 非常快速的静态资产服务(如果你在 S3/etc 上提供服务,这并不重要)

Go HTTP 服务器非常好,但是你需要重新发明轮子来做这些事情(这很好:它并不意味着对每个人都适用)。

我总是发现把 nginx 放在前面更容易——这是它擅长的——让它做“网络服务器”的事情。我的 Go 应用程序执行应用程序的内容,并且只有极少的标头/等。它需要。不要将 nginx 放在前面视为“坏”的事情。

于 2013-07-21T22:32:04.047 回答
18

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

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

如果您需要通过相同的 IP 地址为不同的应用程序提供服务,那么 nginx 是代理在不同应用程序之间分发请求的最佳选择;尽管我更经常将 Varnish 或 HAProxy 从工具箱中取出来处理这类事情。

于 2013-07-21T20:59:44.637 回答
8

Gorilla 网络工具包为您提供:

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

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

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

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

于 2015-12-19T16:42:19.760 回答
3

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

logHandler(gzipHandler(fileServer))

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

于 2016-03-19T05:02:30.597 回答