【问题标题】:Traefik v2: redirect http://servername/foo to http://servername:portTraefik v2:将 http://servername/foo 重定向到 http://servername:port
【发布时间】:2020-12-13 21:32:51
【问题描述】:

我在家庭网络中的 raspberrypi 上运行 traefik (v. 2.3.5) 和其他服务。每个服务都在同一台机器上的不同端口上运行。 我希望 traefik 将呼叫从子路径重定向到不同的 url。像这样:

http://myServer/omv --> http://myServer:8000
http://myServer/heimdall --> http://myServer:8003

但是我不能让它工作。我的路由器没有提供域/子域,所以我必须使用子路径。

OMV 安装在本地,所以我创建了一个文件提供程序,这是唯一一个可以工作的。我无法找出我的 docker-compose 文件做错了什么,例如海姆达尔。

这是 traefik docker-compose.yml

version: '2'

services:
        traefik:
                image: traefik:latest
                container_name: traefik
                restart: unless-stopped
                security_opt:
                        - no-new-privileges:true
                ports:
                        - 80:80
                volumes:
                        - /etc/localtime:/etc/localtime:ro
                        - /var/run/docker.sock:/var/run/docker.sock:ro
                        - /root/myDockers/traefik/data/traefik.yml:/traefik.yml:ro
                        - /root/myDockers/traefik/data/non-docker-services.yml:/non-docker-services.yml:ro

                labels:
                        - "traefik.enable=true"
                        - "traefik.http.routers.traefik.entrypoints=http"
                        - "traefik.http.routers.traefik.rule=PathPrefix(`/api`) || PathPrefix(`/traefik`)" 
                        - "traefik.http.middlewares.traefik-auth.basicauth.users=XXXX:YYYYYYYYYYYYYYYYY"
                        - "traefik.http.routers.traefik.middlewares=traefik-auth,traefik-strip-prefix"
                        - "traefik.http.middlewares.traefik-strip-prefix.stripprefix.prefixes=/traefik"
                        - "traefik.http.routers.traefik.service=api@internal"

Traefik.yml:

api:
        dashboard: true
#        insecure: true
        debug: true

log:
        format: json
        level: DEBUG
accessLog:
       format: common
entryPoints:
        http:
                address: ":80"

providers:
        docker:
          endpoint: "unix:///var/run/docker.sock"
          exposedByDefault: false
          watch: true
        file:
          filename: /non-docker-services.yml
          watch: true

非 docker-services.yml:

http:
  routers:
    omv:
      entryPoints:
        - "http"
      rule: "PathPrefix(`/omv`)"
      service: omv
      middlewares:
        - omv-rr
  middlewares:
    omv-rr:
      redirectRegex:
        regex: "^http://myServer/omv(.*)"
        replacement: "http://myServer:8000${1}"
        permanent: true
  services:
    omv:
     loadBalancer:
       servers:
         - url: "http://myServer:8000"
       passHostHeader: true

heimdall docker-compose.yml:

version: "2"
services:
        heimdall:
                image: ghcr.io/linuxserver/heimdall
                container_name: heimdall
                environment:
                        - PUID=1000
                        - PGID=1000
                        - TZ=Europe/Berlin
                volumes:
                        - /root/myDockers/heimdall/appdata/config:/config
                ports:
                        - 8003:80
                restart: unless-stopped
                labels:
                        - "traefik.enable=true"
                        - "traefik.hppt.routers.heimdall.entrypoints=http"
                        - "traefik.http.routers.heimdall.rule=PathPrefix(`/heimdall`)"
                        - "traefik.http.routers.heimdall.middlewares=heimdall-redirect"
                        - "traefik.http.middlewares.heimdall-redirect.redirectregex.regex=`^http://myServer/heimdall(.*)`"
                        - "traefik.http.middlewares.heimdall-redirect.redirectregex.replacement=`http://myServer:8003`"
                        - "traefik.http.middlewares.heimdall-redirect.redirectregex.permanent=true"
                        - "traefik.http.services.heimdall.loadbalancer.server.url=`http://myServer:8003`"

当我调用 http://myServer/heimdall 时,什么也没有发生,过了一段时间后我得到了超时。我认为原因是,traefik 正在尝试转发 到 heimdall 172.31.0.2:80 的 docker 内部网络地址,我的客户当然无法访问该地址。在 traefik 日志中它指出: 交易 | {"entryPointName":"http","level":"debug","msg":"正在创建服务器 0 http://172.31.0.2:80","routerName":"heimdall@docker","serverName":0,"serviceName":"heimdall","time":"2020-12-13T21:55:02+01:00"}

谁能指出我正确的方向?

【问题讨论】:

    标签: docker redirect docker-compose traefik self-hosting


    【解决方案1】:

    你能在“traefik.http.routers.heimdall.rule”查看“主机”

    也许需要这样,

    "traefik.http.routers.heimdall.rule=Host(`myServer`) && PathPrefix(`/heimdall`)"
    

    【讨论】:

    • 您好,谢谢您的回答,但它也不起作用...
    【解决方案2】:

    经过一些进一步的谷歌工作,我想我在这个论坛帖子中找到了答案:https://community.traefik.io/t/traefik-v2-1-4-how-to-create-a-static-route-and-redirect-to-a-specific-host-and-port/4637

    他们说的是,如果您使用 docker 标签配置 traefik,则只能路由到 docker 容器本身。对于 docker 容器之外的路由,您需要使用 docker 文件提供程序。 这也解释了为什么它适用于我的 OMV,但不适用于 heimdall。

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      相关资源
      最近更新 更多