几年来,我一直在 DigitalOcean droplet 上以 docker 容器的形式运行一些服务,最近我觉得是时候将其中一个服务更新到最新版本了(这个服务是 ghost blogging platform)。之前,我的工作设置是使用球童作为反向代理,这样我就可以通过 访问我的博客blog.mydomain.example
。Caddyfile 设置如下:
blog.mydomain.example {
proxy / 192.0.2.5:1268
}
其中 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
}
}
这代理的 caddy 文档页面对透明功能做了一些说明:
透明的:传递来自原始请求的主机信息,就像大多数后端应用程序所期望的那样。
简写形式:
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}
我也读过本文关于代理类型,但我仍然不明白使反向代理透明意味着什么,以及为什么在这种情况下需要它。有人能解释一下吗?
答案1
这里的意思是,Caddy 在将请求传递到 Docker 容器中的 Web 服务器时不会通过删除 HTTP Host 标头来修改请求。
这些可能是现在需要它的原因:
- 您的博客软件已更新,现在需要
Host
标头与软件中设置的主机名相匹配。 - Caddy 的代理行为已被修改,因此现在
Host
默认删除标头。