2 回答
TA贡献1856条经验 获得超17个赞
没有什么可以阻止您直接处理来自 Go 的请求。
另一方面,nginx 提供了一些开箱即用的功能,这些功能可能很有用,例如:
处理许多虚拟服务器(例如,已经开始响应
app.example.com
并打开不同的应用程序www.example.com
)某些路径中的 http 基本身份验证,例如 www.example.com/secure
访问日志
等等
所有这些都可以在 go 中完成,但需要编程,而在 nginx 中,这只是编辑.conf
文件并重新加载配置的问题。Nginx 甚至不需要重新启动即可进行此更改。
(从“进程”的角度来看,nginx 可以由操作员管理,具有 root 权限,在众所周知的端口上运行,而开发人员将他们的应用程序部署在更高的端口上。)
TA贡献1828条经验 获得超3个赞
这已经被问过几次[ 1 ],但为了后代:
这取决于。
开箱即用,将 nginx 作为反向代理放在前面会给你:
访问日志
错误日志
简单的 SSL 终止
SPDY 支持
gzip 支持
在几行中为某些路由设置 HTTP 标头的简单方法
非常快速的静态资产服务(如果您在 S3/等之外提供服务,这不是那么重要)
转到HTTP服务器是非常好的,但你将需要推倒重来做一些事情(这是罚款:它并不意味着所有人的所有需要)。
我一直发现将 nginx 放在前面更容易——这是它的优点——让它做“网络服务器”的事情。我的 Go 应用程序执行应用程序的工作,并且只有最少的标题/等。它需要。不要认为将 nginx 放在前面是一件“坏事”。
此外,为了扩展我的回答,还有一个崩溃弹性问题:你的 Go 应用程序不受配置语言的限制,可以做很多事情。
其中一些事情可能会使您的程序崩溃。使用 nginx(或 HAProxy,或 Varnish 等)作为反向代理可以为您提供一些请求缓冲(以允许您的程序重新启动)和/或从其本地缓存(即您的静态主页)提供陈旧内容,这可能比让浏览器超时并提供“无法连接到服务器错误”更好。
另一方面,如果您正在构建小型内部服务,则带有您自己的日志记录库的“裸”Go Web 服务器更易于管理(在操作方面)。
如果您确实想在 Go 程序中保留所有内容,请查看gzip 的gorilla/handlers、日志记录和代理标头中间件,以及用于日志轮换的lumberjack(否则您可以使用系统的日志记录工具)。
- 2 回答
- 0 关注
- 159 浏览
添加回答
举报