标签: traefik

如何使用 Traefik 2.0 和 Docker Compose 标签将 http 重定向到 https?

请注意,这是一个 Traefik V2 问题。我在 V1 上有一个解决方案,但 V2 是一个彻底的重整。

以上应该将http://whoami.mysite.com重定向到 http s ://whoami.mysite.com。

  • 在HTTP小号工作很好。
  • http 不会重定向到 https 并引发错误 404。

没有其他文件。一切都在这个 Docker-compose.yml 中,因为它是准备进一步部署的测试。

version: "3.3"

services:

  traefik:
    image: "traefik:v2.0"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web-secure.address=:443"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
      #- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myhttpchallenge.acme.email=me@mail.com"
      - "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
    labels:
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "whoami"
    labels:
      - "traefik.enable=true"
      - …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose traefik

43
推荐指数
7
解决办法
4万
查看次数

使用Traefik的Docker Swarm Windows Worker返回Gateway Timeout

目标是使用Linux服务器和运行Docker For Windows的Windows 10计算机运行混合OS Docker swarm

目前,只要将--endpoint-mode标志设置为'dnsrr',Windows工作者理论上就支持混合操作系统群.这在这里解释.然而,尝试使用traefik路由到简单的码头工人图像stefanscherer/whoami图像失败.

最小失败的例子

// On (Linux) Manager Node:
docker swarm init --advertise-addr <hostaddress> --listen-addr <hostaddress>:2377

// On (Windows 10) Worker Node:
docker swarm join <jointoken>

// On Manager Node:
docker network create --driver=overlay traefik-net

docker service create \
    --name traefik \
    --constraint=node.role==manager \
    --publish 80:80 --publish 8080:8080 \
    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
    --network traefik-net \
    traefik \
    --docker \
    --docker.swarmmode \
    --docker.domain=traefik \
    --docker.watch \
    --web

docker service create \
    --name whoami …
Run Code Online (Sandbox Code Playgroud)

tcp-ip docker docker-swarm bad-gateway traefik

29
推荐指数
1
解决办法
1272
查看次数

使用traefik和php fpm进行网关超时

我有一个设置mailcow与traefik的问题,我遇到网关超时.我也有nextcloud的这个问题,所以我真的很感兴趣,是什么导致网关超时这些问题.

我想这与端口9000和php-fpm上游或者某事有关.

但我想知道,以及如何处理它.

我的traefik.toml:

debug = true
checkNewVersion = true
defaultEntryPoints = ["http", "https"]

[web]
address = ":8080"
[web.auth.basic]
users = ["admin:undecipherablestring"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[acme]
email = "email@address.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true

[[acme.domains]]
  main = "main.com"
  sans = ["monitor.main.com", "ports.main.com", "git.main.com", "cloud.main.com", "mail.main.com"]
Run Code Online (Sandbox Code Playgroud)

我的traefik docker-compose.yml:

version: '2'
services:
  proxy:
    image: traefik
    container_name: traefik
    restart: always
    command: |- 
      --docker 
      --docker.domain=docker.localhost 
      --logLevel=DEBUG …
Run Code Online (Sandbox Code Playgroud)

fpm traefik nextcloud

16
推荐指数
1
解决办法
6405
查看次数

路由到默认端口上通过Docker运行的不同SQL Server实例

我可以将Traefik用于网站,因为它们在连接时使用标题.但是我希望有多个不同的SQL Server实例通过docker运行,这些实例将在外部可用(在docker主机之外,可能在本地网络之外)

那么,是否有任何东西允许连接到在同一个docker实例上运行的不同sql server实例,而不必为它们提供不同的端口或外部ip地址,以便有人可以访问

sql01.docker.local,1433sql02.docker.local,1433从SQL工具.

开始附加问题

由于一直没有回复也许有办法有不同的情况,如:sql.docker.local\instance1sql.docker.local\instance2,虽然我想,也可能是不可能的

结束附加问题

这是我试图使用的docker-compose文件的一个例子(之前我意识到对sql server的查询不通过主机头发送 - 或者我错了吗?)

version: '2.1'
services:
  traefik:
    container_name: traefik
    image: stefanscherer/traefik-windows
    command: --docker.endpoint=tcp://172.28.80.1:2375 --logLevel=DEBUG
    ports:
      - "8080:8080"
      - "80:80"
      - "1433:1433"
    volumes:
      - ./runtest:C:/etc/traefik
      - C:/Users/mvukomanovic.admin/.docker:C:/etc/ssl
    networks:
      - default
    restart: unless-stopped
    labels:
      - "traefik.enable=false"

  whoami:
    image: stefanscherer/whoami
    labels:
      - "traefik.backend=whoami"
      - "traefik.frontend.entryPoints=http"
      - "traefik.port=8080"
      - "traefik.frontend.rule=Host:whoami.docker.local"
    networks:
      - default
    restart: unless-stopped


  sql01:
    image: microsoft/mssql-server-windows-developer
    environment:
      - ACCEPT_EULA=Y
    hostname: sql01
    domainname: sql01.local
    networks:
      - default …
Run Code Online (Sandbox Code Playgroud)

sql-server docker docker-compose traefik

14
推荐指数
1
解决办法
728
查看次数

Traefik 版本 2 只显示 404 或根本不显示网站

我尝试在版本 2 中设置 Traefik,但DNS_PROBE_FINISHED_NXDOMAIN在我的浏览器中只收到“404 Page not found”或错误。

当我检查路由器的 API 端点时,我可以看到在 Traefik 中启用了我的两个容器并且规则是正确的。

curl http://localhost:8080/api/http/routers

[{"entryPoints":["web","secure"],"service":"gotify-gotify","rule":"Host(`sub2.example.org`)","tls":{"certResolver":"letsencrypt"},"status":"enabled","using":["secure","web"],"name":"gotify@docker","provider":"docker"},{"entryPoints":["web","secure"],"service":"nextcloud-cloud","rule":"Host(`sub.example.org`)","tls":{"certResolver":"letsencrypt"},"status":"enabled","using":["secure","web"],"name":"nextcloud@docker","provider":"docker"}]
Run Code Online (Sandbox Code Playgroud)

但是在“sub2”上我根本没有网站,在“sub”上我得到“404页面未找到”。我为“*”设置了 DNS 条目,因此所有子域都转到同一服务器。

我为 docker 容器设置了以下标签

labels:
traefik.enable: true
traefik.http.routers.nextcloud.rule: "Host(`sub.example.org`)"
traefik.http.routers.nextcloud.entrypoints: "web, secure"
traefik.http.routers.nextcloud.tls.certresolver: "letsencrypt"
Run Code Online (Sandbox Code Playgroud)

这是我的 Traefik 配置traefik.toml

[entryPoints]
  [entryPoints.web]
    address = ":80"
  [entryPoints.secure]
    address = ":443"

[providers.docker]
  exposedByDefault = false
  network = "traefik"

[certificatesResolvers.letsencrypt.acme]
  email = "me@example.org"
  storage = "acme.json"
  [certificatesResolvers.letsencrypt.acme.httpChallenge]
    entryPoint = "web"

[api]
  insecure = true
  debug = true
  dashboard = false
Run Code Online (Sandbox Code Playgroud)

Traefik 本身作为 docker 容器运行。

version: …
Run Code Online (Sandbox Code Playgroud)

networking docker traefik

14
推荐指数
1
解决办法
2万
查看次数

如何在启用 TLS 配置的情况下连接到 Traefik TCP 服务?

我正在尝试配置Traefik,以便我可以通过域名访问服务,并且不必设置不同的端口。例如,两个 MongoDB 服务,都在默认端口上,但在不同的域中,example.localhost并且example2.localhost. 只有这个例子有效。我的意思是,其他情况可能有效,但我无法连接到它们,我不明白问题是什么。这可能甚至不是 Traefik 的问题。

我准备了一个包含一个有效示例的存储库。您只需要使用mkcert生成您自己的证书。页面example.localhost返回403 Forbidden错误,但您不必担心,因为此配置的目的是显示 SSL 正在工作(挂锁,绿色状态)。所以不要专注于403.

只有到mongo服务的 SSL 连接有效。我用Robo 3T程序对其进行了测试。选择 SSL 连接后,提供主机example.localhost并为自签名(或自己的)连接选择证书即可。这是唯一有效的方法。无论我是否提供证书,与redisRedis 桌面管理器)和pgsqlPhpStormDBeaverDbVisualizer)的连接都不起作用。我不将 SSL 转发到服务,我只连接到 Traefik。我花了很长时间在上面。我在互联网上搜索。我还没有找到答案。有没有人解决过这个问题?

附注。我在 Linux Mint 上工作,所以我的配置应该可以在这个环境中正常工作,没有任何问题。我会要求 Linux 的解决方案。


如果您不想浏览存储库,我附上最重要的文件:

docker-compose.yml

version: "3.7"

services:
    traefik:
        image: traefik:v2.0
        ports:
            - 80:80
            - 443:443
            - 8080:8080
            - 6379:6379
            - …
Run Code Online (Sandbox Code Playgroud)

postgresql ssl tcp docker traefik

14
推荐指数
1
解决办法
5104
查看次数

将Traefik中的一个域重定向到另一个域

根据文档,你应该能够让Traefik使用以下方法执行302重定向:

  • traefik.ingress.kubernetes.io/redirect-regex
  • traefik.ingress.kubernetes.io/redirect-replacement

我的目标是简单地www.从地址中删除.

这是我尝试过的,但我找不到404服务.

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www-redirect
  namespace: public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/redirect-regex: ^https?://www.example.com/(.*)
    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/$1
spec:
  rules:
  - host: www.example.com
Run Code Online (Sandbox Code Playgroud)

不幸的是,文档没有明确说明如何使用它们.在撰写本文时,唯一的谷歌就是文档(上图).

我目前的工作(假设它将有助于解释问题)是将www.流量路由到返回302的nginx.

server {
    listen       80;
    server_name  www.example.com;
    return 302 https://example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

这看起来有点矫枉过正.

kubernetes traefik kubernetes-ingress

13
推荐指数
1
解决办法
1696
查看次数

k8s入口控制器中的Traefik前向认证

你好我试着在kubernetes traefik ingress的注释中查看auth选项.我找不到任何可以配置前向身份验证的内容,如下所示:https://docs.traefik.io/configuration/entrypoints/#forward-authentication

我希望能够为每个入口资源配置转发身份验证.这在nginx入口控制器中是可能的.

目前是否支持?

kubernetes traefik

11
推荐指数
1
解决办法
1252
查看次数

Traefik 反向代理到外部服务器

我想访问互联网上而不是我的 docker 网络上的 Keycloak 服务器。我想将 Keycloak 服务器的域隐藏在我自己的域后面。因此,如果我访问 http://localhost/auth/ 那么应该显示来自 Keycloak 服务器的页面。我不想重定向到实际的 Keycloak 服务器。

绘画

我已经尝试过以下配置,但它不起作用。当我访问 http://localhost/auth 时,我收到“404 页面未找到”。我希望你可以帮助我。非常感谢您的帮助 :)

docker-compose.yml

version: "3.7"

services:

  proxy:
    image: traefik:v2.2
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.file=true"
      - "--providers.file.filename=/etc/traefik/rules.yml"
      - "--entrypoints.web.address=:80"
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./rules.yml:/etc/traefik/rules.yml

  website:
    image: containous/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.website.rule=Host(`localhost`)"
      - "traefik.http.routers.website.entrypoints=web"
Run Code Online (Sandbox Code Playgroud)

规则.yml

http:
  routers:
    my-route:
      rule: "Host(`localhost`) && PathPrefix(`/auth`)"
      service: my-keycloak-server
  services:
    my-keycloak-server:
      loadBalancer:
        servers:
          - url: "https://keycloak.domain.com/auth"
Run Code Online (Sandbox Code Playgroud)

reverse-proxy traefik

11
推荐指数
1
解决办法
1万
查看次数

跟踪traefik代理的Gitlab'Gateway Timeout'

所以我正在尝试使用traefik作为反向代理在docker swarm上建立一个gitlab-ce实例.

这是我的代理堆栈;

version: '3'

services:
  traefik:
    image: traefik:alpine
    command: --entryPoints="Name:http Address::80 Redirect.EntryPoint:https" --entryPoints="Name:https Address::443 TLS" --defaultentrypoints="http,https" --acme --acme.acmelogging="true" --acme.email="freelyformd@gmail.com" --acme.entrypoint="https" --acme.storage="acme.json" --acme.onhostrule="true" --docker --docker.swarmmode --docker.domain="mydomain.com" --docker.watch --web
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    networks:
      - traefik-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager

networks:
  traefik-net:
    external: true
Run Code Online (Sandbox Code Playgroud)

还有我的gitlab堆栈

version: '3'

services:
  omnibus:
    image: 'gitlab/gitlab-ce:latest'
    hostname: 'lab.mydomain.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://lab.mydomain.com'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        registry_external_url 'https://registry.mydomain.com'
        registry_nginx['listen_port'] = 80
        registry_nginx['listen_https'] = false …
Run Code Online (Sandbox Code Playgroud)

gitlab docker-swarm traefik

10
推荐指数
1
解决办法
3312
查看次数