我正在用 Go 编写一个网络应用程序。目前我的布局如下所示:
[CloudFlare] --> [Nginx] --> [程序]
Nginx 执行以下操作:
- 执行一些重定向(即
www.domain.tld
-->domain.tld
) - 添加
X-Frame-Options
等 header 。 - 处理静态图片。
- 写入
access.log
。
过去我会使用 Nginx 来执行 SSL 终止和其他一些任务。由于现在由 CloudFlare 处理,它所做的一切本质上都是静态图像。鉴于 Go 有一个内置的 HTTP FileServer 并且 CloudFlare 可以为我接管处理静态图像,我开始想知道为什么 Nginx 一开始就处于领先地位。
什么都不放在前面被认为是个坏主意吗?
最佳答案
在你的情况下,你可以不运行 nginx,但我不推荐它。
但是,正如我提到的 in this answer它仍然可以做很多事情,你需要在 Go 中“重新发明”。
- 内容安全 header
- SSL(如果 CloudFlare 和您之间的连接终止 SSL,那么他们之间的连接是否不安全?)
- SSL session 缓存和 HSTS
- 客户端正文限制和 header 缓冲区
- 重新启动 Go 应用程序时出现 5xx 错误页面和维护页面
- “免费”日志记录(除非您想在 Go 应用中编写所有内容)
- gzip(同样,除非你想在你的 Go 应用中实现它)
如果您正在运行内部 Web 服务或轻量级的东西,或者真的不需要 nginx 的额外功能,则单独运行 Go 是有意义的。如果您正在构建 Web 应用程序,那么 nginx 将帮助从应用程序本身抽象“Web 服务器”任务。
关于http - 我是否应该始终为 Web 应用程序使用反向代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902338/