我应该总是使用一个Web应用程序的反向代理?

我在Go上写了一个Web应用程序。 目前我有一个看起来像这样的布局:

[CloudFlare] – > [Nginx] – > [程序]

Nginx做了以下工作:

  • 执行一些redirect(即www.domain.tld – > domain.tld
  • 添加诸如X-Frame-Options标题。
  • 处理静态图像。
  • 写入access.log

在过我会使用Nginx,因为它执行SSL终止和一些其他任务。 由于现在由CloudFlare处理,所以它本质上是静态图像。 鉴于Go有一个内置的HTTP FileServer,CloudFlare可以为我处理静态图像,所以我开始怀疑为什么Nginx会在第一位置。

在前面没有任何东西是不好的主意?

在你的情况下,你可能会逃避不运行nginx,但我不会推荐它。

然而,正如我在这个答案中提到的,还有很多事情可以做,你需要在Go中“重塑”。

  • 内容安全标头
  • SSL(是否CloudFlare和您不安全,如果他们正在终止SSL的连接?)
  • SSL会话缓存和HSTS
  • 客户端主体限制和头缓冲区
  • 5xx错误页面和维护页面,当您重新启动您的Go应用程序
  • “免费”日志记录(除非您想要在Go应用程序中编写所有内容)
  • gzip(再次,除非你想在你的Go应用程序中实现)

如果您正在运行内部Web服务或者轻量级的东西,或者真的不需要nginx的额外功能,那么Running Go standalone是有意义的。 如果您正在构建Web应用程序,那么nginx将帮助从应用程序本身抽象出“Web服务器”任务。

我根本不会用nginx来说实话,一些不错的老兄测试了快速的cgi go + nginx然后去了独立的库。 他提出的结果是相当有趣的,独立的托管似乎在处理请求比在nginx后面使用它好得多,最后的建议是,如果你不需要nginx的特定功能,不要使用它。 全文

你可以运行它作为独立的,如果你在你的网站上使用部分/完整的ssl ,你可以使用另一个去http服务器重定向到安全的https路由。

如果你不需要,不要使用ngnix。 Go以较少的行执行SSL,那么你必须在ngnix配置文件中写入。 唯一的原因是免费的日志记录,但我想知道有多少代码行登录。 在俄罗斯有关于200行代码中的反转代理的很好的文章 。 如果Go可以用来代替ngnix,那么当你使用Go时,ngnix是不需要的。 如果您希望在同一站点上有几个Go进程或Go和PHP,则需要使用ngnix。 或者,如果您使用Go,并且在添加ngnix时遇到了一些问题,则可以解决问题。