【问题标题】:Traefik's routing rule when using regexTraefik 使用正则表达式时的路由规则
【发布时间】:2019-07-19 20:37:50
【问题描述】:

使用部署到 Azure Service Fabric 的 Traefik 1.7.12 版。

我希望 Traefik 将缓存控制标头添加到来自也部署到集群的 Web 应用程序的某些请求的响应中。我发现可以做到这一点的方法是为我的应用程序创建 2 个具有不同前端路由规则的独立服务。最终的结果是这样的:

Route Rule
Host:devmachine.localhost;PathPrefix:/

添加“cache-control:no-cache”响应头。

Route Rule
Host:devmachine.localhost;Path:/{url:(.*)(/banner$|\.(js|css)\??)}

其中添加了“cache-control:max-age:86400”响应头。

以下是集群中每个服务清单的 sn-p:

      <Extensions>
        <Extension Name="Traefik">
          <Labels xmlns="http://schemas.microsoft.com/2015/03/fabact-no-schema">
            <Label Key="traefik.enable">true</Label>
            <Label Key="traefik.frontend.passHostHeader">true</Label>
            <Label Key="traefik.frontend.rule">Host:devmachine.localhost;PathPrefix:/</Label>
            <Label Key="traefik.backend.loadbalancer.stickiness">true</Label>
            <Label Key="traefik.backend.healthcheck.path">/somepage</Label>
            <Label Key="traefik.backend.healthcheck.interval">60s</Label>
            <label key="traefik.frontend.headers.customResponseHeaders">cache-control:no-cache</label>
          </Labels>
        </Extension>
      </Extensions>

      <Extensions>
        <Extension Name="Traefik">
          <Labels xmlns="http://schemas.microsoft.com/2015/03/fabact-no-schema">
            <Label Key="traefik.enable">true</Label>
            <Label Key="traefik.frontend.passHostHeader">true</Label>
            <Label Key="traefik.frontend.rule">Host:devmachine.localhost;Path:/{url:(.*)(/banner$|\\.(js|css)\\??)}</Label>
            <label key="traefik.frontend.headers.customResponseHeaders">cache-control:max-age=86400</label>
            <label key="traefik.frontend.priority">200</label>
          </Labels>
        </Extension>
      </Extensions>

问题是我的所有响应都获得了“no-cache”标头,好像没有应用第二个匹配器,包括以下示例 URI(应该由第二个路由规则处理):

https://example.com/banner
https://example.com/scripts/some.js
https://example.com/scripts/some-hdbxy778.js
https://example.com/scripts/someother.js?v=2.744

尽管第二个路由规则更长(因为 traefik 应该按长度降序对它们进行排序)并且手动设置优先级 (200)。

【问题讨论】:

标签: azure azure-service-fabric traefik


【解决方案1】:

结果证明这是一个大小写问题。 traefik 中的 Service Fabric 提供程序使用“xml.Unmarshal”将扩展配置反序列化为本地类型。

根据文档 (https://golang.org/pkg/encoding/xml/#Unmarshal)

Unmarshal 使用区分大小写的比较来匹配 XML 元素名称 标记值和结构字段名称。

这是有道理的。

Traefik 的文档已更新以指出这一点:https://github.com/containous/traefik/pull/5160

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2019-01-01
    • 2014-04-14
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多