为了账号安全,请及时绑定邮箱和手机立即绑定

在 Web 应用程序中使用 nginx 服务器转到 Web 服务器

在 Web 应用程序中使用 nginx 服务器转到 Web 服务器

Go
陪伴而非守候 2021-11-08 09:57:47
我无法从 Google 搜索中找到这个答案,似乎没有人清楚地解释纯 Go 网络服务器和 nginx 反向代理之间的区别。前面大家好像都用nginx做web应用。我的问题是,虽然 Go 具有所有 http 服务功能,但在纯 Go Web 服务器上使用 nginx 有什么好处?在大多数情况下,我们为这里的所有路由设置了 Go 网络服务器,并在前面设置了 nginx 配置。就像是:limit_req_zone $binary_remote_addr zone=limit:10m rate=2r/s;server {    listen 80;    log_format lf '[$time_local] $remote_addr ;    access_log /var/log/nginx/access.log lf;    error_log /var/log/nginx/error.log;    set_real_ip_from 0.0.0.0/0;    real_ip_header X-Forwarded-For;    real_ip_recursive on;    server_name 1.2.3.4 mywebsite.com;}当我们有这个 Go 时:func handler(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])}func main() {    http.HandleFunc("/", handler)    http.ListenAndServe(":8080", nil)}nginx 和 Go Web 服务器的流量是否不同?如果没有,为什么我们有两层 Web 服务器?请帮助我理解这一点。
查看完整描述

2 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

没有什么可以阻止您直接处理来自 Go 的请求。

另一方面,nginx 提供了一些开箱即用的功能,这些功能可能很有用,例如:

  • 处理许多虚拟服务器(例如,已经开始响应app.example.com并打开不同的应用程序www.example.com

  • 某些路径中的 http 基本身份验证,例如 www.example.com/secure

  • 访问日志

  • 等等

所有这些都可以在 go 中完成,但需要编程,而在 nginx 中,这只是编辑.conf文件并重新加载配置的问题。Nginx 甚至不需要重新启动即可进行此更改。

(从“进程”的角度来看,nginx 可以由操作员管理,具有 root 权限,在众所周知的端口上运行,而开发人员将他们的应用程序部署在更高的端口上。)


查看完整回答
反对 回复 2021-11-08
?
子衿沉夜

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(否则您可以使用系统的日志记录工具)。


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信