我是否应该始终使用反向代理来使用Web应用程序?

时间:2014-01-03 11:14:29

标签: http web-applications nginx go reverse-proxy

我正在Go中编写一个Web应用程序。目前我有一个如下所示的布局:

[CloudFlare] - > [Nginx] - > [程序]

Nginx执行以下操作:

  • 执行一些重定向(即www.domain.tld - > domain.tld
  • 添加X-Frame-Options
  • 等标题
  • 处理静态图像。
  • access.log

过去我会使用Nginx执行SSL终止和其他一些任务。由于现在由CloudFlare处理,所以它实际上只是静态图像。鉴于Go有一个内置的HTTP FileServer,CloudFlare可以接管处理静态图像,我开始想知道为什么Nginx首先处于前面。

将任何内容放在前面是不是一个坏主意?

3 个答案:

答案 0 :(得分:6)

在你的情况下,你可能会因为没有运行nginx而逃脱,但我不推荐它。

然而,当我触及in this answer时,仍然可以做很多事情,你需要在Go中“重新发明”。

  • 内容安全标题
  • SSL(CloudFlare与您之间的连接,如果它们终止SSL会让您感到不安全吗?)
  • SSL会话缓存& HSTS
  • 客户端正文限制和标头缓冲区
  • 重新启动Go应用程序时
  • 5xx错误页面和维护页面
  • “免费”记录(除非您想在Go应用程序中编写所有内容)
  • gzip(再次,除非你想在你的Go应用程序中实现它)
如果您正在运行内部Web服务或轻量级,或者真正不需要nginx的额外功能,那么运行Go standalone是有意义的。如果您正在构建Web应用程序,那么nginx将帮助从应用程序本身抽象出“Web服务器”任务。

答案 1 :(得分:4)

我不会使用nginx说实话,一些不错的家伙快速测试cgi go + nginx并且只是去独立的库。他提出的结果非常有趣,独立托管似乎在处理请求方面比在nginx后使用它要好得多,最后的建议是如果你不需要nginx的特定功能那么用它。 full article

您可以单独运行它,如果您在网站上使用部分/完整ssl,则可以使用另一个转发http服务器重定向到安全https路由。

答案 2 :(得分:4)

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