代码之家  ›  专栏  ›  技术社区  ›  Ahmadposten

使用不同于后端端口的前端端口

  •  3
  • Ahmadposten  · 技术社区  · 7 年前

    我在服务前面有一个traefik实例。该服务在端口9000上运行。但是,我希望端口8000将请求代理到此服务。两人都参加了马拉松比赛。

    我试过使用 traefik.port 然而,当我这样做时,从8000/仪表板的后端块判断,似乎是假设后端也在8000上运行。

    我还尝试了其他解决方案,例如

    traefik.frontend.rule=Host:traefikhost:8000

    文件对这个案子真的不清楚

    1 回复  |  直到 7 年前
        1
  •  4
  •   Azize    7 年前

    你需要使用 traefik.port 定义后端端口。对你来说应该是 traefik.port=9000 .

    80 ,因为您希望它在另一个端口上侦听,所以需要为其定义地址 entryPoints --entryPoints='Name:http Address::8000' ,在本例中,它将在端口上侦听 8000 .

    我给你举一个使用docker的例子,然后你可以用marathon做一个比较。

    运行Traefik在端口上侦听 :

    docker service create \
        --name traefik \
        --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
        --network traefik-net \
        --publish 8080:8080 \
        --publish 8000:8000 \
        traefik \
            --entryPoints="Name:http Address::8000" \
            --defaultentrypoints="http" \
            --checknewversion=false \
            --docker \
            --docker.swarmmode \
            --docker.domain=mydomain.com \
            --docker.watch \
            --docker.exposedbydefault=false \
            --web \
            --loglevel=DEBUG
    

    后端侦听端口 9000

    docker service create \
        --name myweb \
        --mount type=bind,source=$PWD/httpd.conf,target=/usr/local/apache2/conf/httpd.conf \
        --label traefik.port=9000 \
        --label traefik.enable=true \
        --network traefik-net \
        httpd
    

    测试它,检查Traefik api :

    $ curl -s "http://localhost:8080/api" | jq .
    {
      "docker": {
        "backends": {
          "backend-myweb": {
            "servers": {
              "server-myweb-1": {
                "url": "http://10.0.0.5:9000",
                "weight": 0
              }
            },
            "loadBalancer": {
              "method": "wrr"
            }
          }
        },
        "frontends": {
          "frontend-Host-myweb-mydomain-com": {
            "entryPoints": [
              "http"
            ],
            "backend": "backend-myweb",
            "routes": {
              "route-frontend-Host-myweb-mydomain-com": {
                "rule": "Host:myweb.mydomain.com"
              }
            },
            "passHostHeader": true,
            "priority": 0,
            "basicAuth": []
          }
        }
      }
    }
    

    $ curl -H "Host: myweb.mydomain.com" "http://localhost:8000/"
    <html><body><h1>It works!</h1></body></html>