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

Dan*_*e B 79 webserver web-services http nginx go

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

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

eli*_*rar 129

这取决于.

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

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

转到HTTP服务器是非常好的,但你需要推倒重来做一些事情(这是罚款:它并不意味着所有人的所有需要).

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

  • 另一个重要特性:如何升级/维护您的应用程序(不丢弃数据包时)?Nginx可以让您在不丢失数据包的情况下控制流量. (15认同)
  • @DanieleB Go HTTP服务器只生成您想要的日志(即使用`log`包).如果要记录IP地址,资源访问等,则需要编写该文件.除了基础知识之外,设置标题也是如此.虽然我没有任何具体的数据,但Go前面的nginx应该不比Go慢:事实上,由于gzip和它自己的优化,它可能会更快."成本"将是更多的内存/ CPU利用率,但nginx在这方面也非常有效. (3认同)
  • 在我的Raspberry Pi上,将Nginx放在Go前面可以显着提高页面加载速度. (3认同)

Ask*_*sen 17

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

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

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


Mos*_*vah 5

大猩猩Web工具包为您提供:

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

这填补了net/http像NGINX这样的Go 和HTTP服务器之间的巨大差距.

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

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