为什么 PathPrefixStrip 有效而 PathPrefix 无效?

Why does PathPrefixStrip work when PathPrefix won't?

我有一个使用 --prefix-paths 构建的 GatsbyJS 静态站点。 pathPrefixgatsby-config.js 中设置为 /environment/test。它被部署到 docker 集群 运行ning Traefik。

向服务添加以下标签使一切正常 运行: traefik.frontend.rule=PathPrefixStrip:/environment/test

然后我可以浏览到 /environment/test 并在我的 GatsbyJs 站点中点击。

但是我觉得很奇怪,因为后端是用路径前缀构建的。

添加以下标签不起作用: traefik.frontend.rule=PathPrefix:/environment/test

它不应该与 PathPrefix 一起使用而不是 PathPrefixStrip 吗?

GatsbyJS 中的 pathPrefix 配置意味着你的网站的每个 link 都会以 /environment/test 为前缀(参见 documentation),但这并不意味着在容器 运行 网站,页面实际上托管在这个路径上。 你的情况好像不是这样。

这意味着当通过 Traefik 与 PathPrefixStrip 连接时,当您在浏览器中单击 link:

  1. 浏览器请求/environment/test/page
  2. Traefik 将此转换为对 /page
  3. 容器的请求
  4. 容器实际上在 / 上提供文件,所以它用页面
  5. 回答

当通过 Traefik 与 PathPrefix 连接时:

  1. 浏览器请求/environment/test/page
  2. Traefik 将此转换为对 /environment/test/page
  3. 容器的请求
  4. 容器实际上在 / 上提供文件,所以找不到页面。

因此,您将网站的 pathPrefix 设置与提供同一网站的路径混淆了。

当前情况的替代方案是在 /environment/test/ 下为网站提供服务并使用 PathPrefix 和 traefik。