我有一个以 Docker 堆栈运行的 Wordpress 网站。
如果我直接通过 DNAT 访问它(使用仅针对此站点的有效 IP 地址),一切都正常运行。
如果我尝试通过 Traefik 访问它(这样我就可以与其他 HTTP 服务共享有效的 IP 地址),我只能访问该网站的主页和同一网站的 Wordpress 管理页面,但对于所有其他常规页面,我都会收到如下错误消息:
无法连接
Firefox 无法与 192.168.109.236 的服务器建立连接。
共享 Traefik 所用 IP 地址的其他(非 Wordress)网站运行正常。只有这个 Wordpress 驱动的网站存在此问题。
192.168.109.236 IP 地址是 Traefik 中配置为此站点后端的 Docker 工作程序的地址,如您所见traefik.toml片段:
[file]
[frontends]
[frontends.site]
backend = "site"
[frontends.site.routes.site1]
rule = "Host:www.EXAMPLE.com,www.EXAMPLE.com.br,EXAMPLE.com,EXAMPLE.com.br"
[backends]
[backends.site]
[backends.site.loadbalancer.stickiness]
[backends.site.healthcheck]
path = "/"
interval = "10s"
[backends.site.servers.c1]
url = "http://192.168.109.236:9003"
[backends.sita.servers.a1]
url = "http://192.168.109.233:9003"
[backends.site.servers.a2]
url = "http://192.168.109.219:9003"
如何让通过 Traefik 访问的 Wordpress 链接指向站点 URL 而不是 Docker worker 的 IP 地址?
答案1
在如何修复通过 Traefik 访问时 Wordpress 链接未指向网站 URL 的问题?我最终找到了让 Wordpress 与 Traefik 良好配合的解决方案:
passHostHeader = true
所以我之前的 traefik.toml 代码片段现在是:
[file]
[frontends]
[frontends.site]
backend = "site"
passHostHeader = true
[frontends.site.routes.site1]
rule = "Host:www.EXAMPLE.com,www.EXAMPLE.com.br,EXAMPLE.com,EXAMPLE.com.br"
[backends]
[backends.site]
[backends.site.loadbalancer.stickiness]
[backends.site.healthcheck]
path = "/"
interval = "10s"
[backends.site.servers.c1]
url = "http://192.168.109.236:9003"
[backends.sita.servers.a1]
url = "http://192.168.109.233:9003"
[backends.site.servers.a2]
url = "http://192.168.109.219:9003"
这样,Wordpress 就可以获得信息来执行其内部重定向魔法,而无需使用 Docker 工作者的 IP。
了解详情传递主机头以及如何设置它,我必须阅读两者https://docs.traefik.io/basics/和https://docs.traefik.io/user-guide/examples/我想它可以在这种情况下帮助我,因为 Traefik 的文档像往常一样以字谜形式呈现此信息。