Traefik + Docker反向代理 - 针对不同路径的不同身份验证?

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

我正在运行Docker服务(OwnTracks Recorder),使用Traefik作为身份验证的反向代理。它的设置是通过docker-compose;这是服务上的标签:

  labels:
    - traefik.enable=true
    - traefik.frontend.rule=PathPrefixStrip:/owntracks
    - traefik.frontend.auth.basic=user1:hash1,user2:hash2

这按预期工作。我试图解决的问题是Owntracks实际上有两个元素:一个仪表板,它将在https://example.com/owntracks,一个api,在https://example.com/owntracks/pub。虽然owntracks本身没有内置身份验证,但我想将仪表板限制为只有user1,同时允许所有经过身份验证的用户访问api。 Owntrack的documentation使用ngnix作为示例,我认为在我的情况下可能看起来像:

location /owntracks/dashboard/ {
     auth_basic              ....;
     proxy_pass              http://127.0.0.1:8083/;
     proxy_http_version      1.1;
     proxy_set_header        Host $host;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header        X-Real-IP $remote_addr;
}
location /owntracks/pub/ {
     auth_basic              ....;
     proxy_pass              http://127.0.0.1:8083/pub/;
     proxy_http_version      1.1;
     proxy_set_header        Host $host;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header        X-Real-IP $remote_addr;
}

问题是,我无法弄清楚如何在Traefik中配置这样的东西。据我了解,你会得到一个整个容器的traefik.frontend.auth.basic“label”?理想情况下,我更喜欢通过Owntracks的docker-compose文件中的标签进行设置,以避免在Traefik本身中需要自定义每服务配置(即我可以依赖Traefik自动发现服务)。

任何指针将不胜感激。

docker docker-compose traefik
1个回答
0
投票

解决方案是使用细分。 Traefik的documentation有点误导:

段标签用于定义暴露多个端口的容器的路由。段是一组适用于容器暴露的端口的标签。您可以定义与容器中公开的端口一样多的段。

实际上,段不仅可以用于使用多个端口的容器,而且可以定义比容器上暴露的端口更多的段。在这种情况下,它很简单:

  labels:
    - traefik.enable=true

    - traefik.segment1.frontend.rule=PathPrefix:/owntracks/pub;ReplacePath:/pub
    - traefik.segment1.frontend.auth.basic=user1:hash1,user2:hash2

    - traefik.segment2.frontend.rule=PathPrefixStrip:/owntracks
    - traefik.segment2.frontend.auth.basic=user1:hash1
© www.soinside.com 2019 - 2024. All rights reserved.