什么是“透明反向代理”?

ROO*_*DAY 8 reverse-proxy transparent-proxy

几年来,我一直在 DigitalOcean droplet 上将一些服务作为 docker 容器运行,最近我认为是时候将其中一个更新到最新版本(有问题的服务是幽灵博客平台)。以前,我的工作设置使用caddy作为反向代理,因此我可以通过访问blog.mydomain.example. Caddyfile 设置如下所示:

blog.mydomain.example {
    proxy / 192.0.2.5:1268
}
Run Code Online (Sandbox Code Playgroud)

其中 IP:port 是本地 ghost docker 容器的 IP:port。

但是,在将我的 ghost 实例更新到最新版本并保持相同的配置后,出现了一个奇怪的错误。导航到blog.mydomain.example会加载很长时间然后突然重定向到https://192.0.2.5:2368,这当然不起作用,因为这是我的 droplet 上的本地 IP。在网上搜索了很长时间后,我最终找到了修复程序,它需要像这样修改我的 Caddyfile:

blog.mydomain.example {
    proxy / 192.0.2.5:1268 {
        transparent
    }
}
Run Code Online (Sandbox Code Playgroud)

代理caddy 文档页面有一些关于透明的作用:

透明:从原始请求中传递主机信息,正如大多数后端应用程序所期望的那样。
简写:
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}

我也阅读了关于代理类型的这篇文章,但我仍然对使反向代理透明意味着什么以及为什么在这种情况下需要它感到困惑。有人可以解释一下吗?

Ter*_*nen 11

这意味着在将请求传递到 Docker 容器中的 Web 服务器时,Caddy 不会通过去除 HTTP Host 标头来修改请求。

这些可能是现在需要它的原因:

  1. 您的博客软件已更新,现在它希望Host标题与软件中设置的主机名相匹配。
  2. Caddy 的代理行为已被修改,现在Host默认情况下它会删除标头。

  • 也许更准确地说,它在任何情况下都不会从字面上剥离 Host 标头,这只是问题是保留原始请求(`blog.mydomain.com`)中的一个还是将其修改为后端一个(`172.17.0.5 `) (2认同)