AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1166026
Accepted
Fabio Orefice Amez
Fabio Orefice Amez
Asked: 2024-10-02 16:19:31 +0800 CST2024-10-02 16:19:31 +0800 CST 2024-10-02 16:19:31 +0800 CST

Traefik HTTP Basic Auth 仪表板不起作用

  • 772

最后,在配置上花费了大量时间之后,我却束手无策了。本来应该很简单的事情却变得相当复杂。希望有人能帮我找到解决方案。

我正在尝试使用 Traefik 运行容器。我没有像许多人一样将所有配置放在容器的 docker-compose 文件 (docker-compose.yml) 中,而是将配置放在专用文件 (traefik.yml) 中,因为这对我来说更灵活。

我有以下用于 Traefik 的 docker-compose.yml 文件:

version: "3.8"

services:
  traefik:
    image: traefik:latest
    hostname: traefik
    container_name: traefik
    restart: unless-stopped
    command:
      - "--configFile=/traefik.yml"
    networks:
      - traefik_gw_bridge
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - ./traefik.yml:/traefik.yml
      - logs:/logs
      - letsencrypt:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro
    healthcheck:
      test: ["CMD", "traefik", "healthcheck", "--ping"]
      interval: 10s
      timeout: 6s
      retries: 2
      start_period: 5s

networks:
  traefik_gw_bridge:
    driver: bridge
    external: true

volumes:
  letsencrypt:
  logs:

这些是我用于 traefik.yml 的配置参数:

api:
  dashboard: true     
  insecure: false    

ping:
  entryPoint: web      

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false 

entryPoints:
  web:
    address: ":80"   
  websecure:
    address: ":443"   
  traefik:
    address: ":8080" 

http:
  routers:
    dashboard:
      rule: "Host(`traefikdash.mydomain.com`)" 
      entryPoints:
        - traefik
      service: api@internal
      middlewares:
        - auth

  middlewares:
    auth:
      basicAuth:
        users:
          - "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"

log:                              
  filePath: "/logs/traefik.log"
  format: json
  level: DEBUG

accessLog:                        
  filePath: "/logs/access.log"
  bufferingSize: 150

certificatesResolvers:
  le:    
    acme:
      email: "[email protected]"    
      storage: "/letsencrypt/acme.json"  
      httpChallenge:
        entryPoint: "web" 

从逻辑上讲,在配置文件的以下部分,我尝试定义一个路由器,以使用用户名和密码为仪表板设置基本身份验证:

http:
  routers:
    dashboard:
      rule: "Host(`traefikdash.mydomain.com`)"  # Reemplaza `yourdomain.com` con tu dominio
      entryPoints:
        - traefik
      service: api@internal
      middlewares:
        - auth

  middlewares:
    auth:
      basicAuth:
        users:
          - "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"

我无法得到我想要的结果。当我访问traefikdash.mydomain.com或traefikdash.mydomain.com:8080或traefikdash.mydomain.com:8080/dashboard/ 时traefikdash.mydomain.com/dashboard,我只是从 Traefik 和我的浏览器得到以下响应:

  • HTTP 404 页面未找到
  • 错误连接被拒绝

尝试了各种类型的配置后,我根本找不到有关如何实现 HTTP 基本身份验证以访问 Traefik 仪表板的更多信息。

docker
  • 1 1 个回答
  • 89 Views

1 个回答

  • Voted
  1. Best Answer
    Fabio Orefice Amez
    2024-10-02T19:16:05+08:002024-10-02T19:16:05+08:00

    最后,我找到了解决方案。

    Traefik 文档还不错,但有时也不是很具体,我需要依靠 StackOverflow 社区来找到明确的答案。

    Traefik 以不同的方式处理专用配置(配置文件)。

    • Traefik的静态配置=traefik.yml
    • Traefik 的动态配置 = config.yml

    动态配置基本上是向每个提供商提供的路由器和中间件的配置,在我的情况下是静态文件配置。

    因此,最后,您需要从 traefik.yml 中引用一个动态配置文件,您可以在其中实现 HTTP Basic Auth,如下所示:

    • traefik.yml:
        api:
          dashboard: true     
          insecure: false   
        
        ping:
          entryPoint: web    
        
        providers:
          docker:
            endpoint: "unix:///var/run/docker.sock"
            exposedByDefault: false 
          file:                 
            filename: /config.yml   
            watch: true
        
        entryPoints:
          web:
            address: ":80"    
          websecure:
            address: ":443"  
          traefik:
            address: ":8080"  
        
        log:                              
          filePath: "/logs/traefik.log"
          format: json
          level: DEBUG
        
        accessLog:            
          filePath: "/logs/access.log"
          bufferingSize: 150
        
        certificatesResolvers:
          le:   
            acme:
              email: "[email protected]"    
              storage: "/letsencrypt/acme.json"   
              httpChallenge:
                entryPoint: "web"
    
    • 配置.yml:
        http:
          routers:
            dashboard:
              rule: "Host(`yourdomain.domain.com`)"
              entryPoints:
                - traefik
              service: api@internal
              middlewares:
                - auth
        
          middlewares:
            auth:
              basicAuth:
                users:
                  - "user:password"
    

    这样,当我访问我的 URL 域(例如)时yourdomain.domain.com:8080,它会正确地提示我进行用户身份验证。

    • 0

相关问题

  • 当你让一个进程监听 0.0.0.0 而不是 127.0.0.1 时,为什么 docker 工作仍然很困惑

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve