使用正则表达式时,Traefik的路由规则

问题描述 投票:0回答:1

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

我希望Traefik将缓存控制标头添加到来自Web应用程序的某些请求的响应,该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”响应头。

分别是集群中每个服务清单的摘录:

      <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个回答
0
投票

这原来是套管问题。 traefik中的Service Fabric提供程序使用“ xml.Unmarshal”将扩展配置反序列化为本地类型。

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

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

这有道理。

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

© www.soinside.com 2019 - 2024. All rights reserved.