首页 > 解决方案 > 为什么 PathPrefixStrip 在 PathPrefix 不起作用时起作用?

问题描述

我有一个用--prefix-paths. pathPrefix设置为/environment/testin 。gatsby-config.js它被部署到运行 Traefik 的 docker swarm 上。

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

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

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

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

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

标签: traefikgatsby

解决方案


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

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

  1. 浏览器请求/environment/test/page
  2. Traefik 将其转换为对容器的请求/page
  3. 容器实际上正在提供文件,/因此它会响应页面

通过 Traefik 连接时PathPrefix

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

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

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


推荐阅读