为什么当PathPrefix不能使用PathPrefixStrip时?

时间:2018-05-15 08:54:30

标签: traefik gatsby

我有一个使用--prefix-paths构建的GatsbyJS静态网站。 pathPrefix/environment/test中设置为gatsby-config.js。它被部署到运行Traefik的码头工人群中。

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

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

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

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

不应该使用PathPrefix代替PathPrefixStrip吗?

1 个答案:

答案 0 :(得分:8)

GatsbyJS中的pathPrefix配置意味着您网站的每个链接都会以/environment/test为前缀(请参阅documentation),但这并不意味着在运行网站的容器上,该页面实际上托管在此路径上。 在你的情况下,情况似乎并非如此。

这意味着当使用PathPrefixStrip通过Traefik进行连接时,在浏览器中点击一个链接:

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

    通过Traefik与PathPrefix

    连接时
    1. 浏览器请求/environment/test/page
    2. Traefik将此转换为对/environment/test/page
    3. 的容器的请求
    4. 容器实际上是在/上提供文件,因此找不到该页面。
    5. 因此,您将网站的pathPrefix设置与提供相同网站的路径混淆。

      因此,目前情况的替代方案是在/environment/test/下为网站提供服务,并使用PathPrefix与traefik一起使用。