我正在Go中编写一个Web应用程序.目前我有一个如下所示的布局:
[CloudFlare] - > [Nginx] - > [程序]
Nginx执行以下操作:
执行一些重定向(即www.domain.tld
- > domain.tld
)
添加诸如的标题X-Frame-Options
.
处理静态图像.
写道access.log
.
在过去,我会使用Nginx执行SSL终止和其他一些任务.由于现在由CloudFlare处理,所以它实际上只是静态图像.鉴于Go有一个内置的HTTP FileServer,CloudFlare可以接管处理静态图像,我开始想知道为什么Nginx首先处于前面.
把任何东西都放在前面被认为是个坏主意吗?
在你的情况下,你可能可以逃避不运行nginx,但我不推荐它.
然而,正如我在这个答案中提到的那样,它仍然有很多可以做到的,你需要在Go中"重新发明".
内容安全标头
SSL(如果它们终止SSL,那么CloudFlare和你之间的连接是不安全的吗?)
SSL会话缓存和HSTS
客户端主体限制和标头缓冲区
重新启动Go应用程序时,会出现5xx错误页面和维护页面
"免费"记录(除非您想在Go应用程序中编写所有内容)
gzip(再次,除非你想在你的Go应用程序中实现它)
如果您正在运行内部Web服务或轻量级,或者真正不需要nginx的额外功能,那么运行Go standalone是有意义的.如果您正在构建Web应用程序,那么nginx将帮助从应用程序本身抽象出"Web服务器"任务.