使用 Traefik 进行 SSL 直通

SSL passthrough with Traefik

我需要将 SSL 连接直接发送到后端,而不是在我的 Traefik 上解密。后端需要接收https请求。

我尝试了 traefik.frontend.passTLSCert=true 选项,但在访问我的 Web 应用程序时收到“404 页面未找到”错误,并且在 Traefik 容器上也收到此错误

traefik       | time="2018-09-16T10:47:41Z" level=error msg="Failed to create TLSClientConfig: no TLS provided"
traefik       | time="2018-09-16T10:47:41Z" level=error msg="Failed to create RoundTripper for frontend frontend-Host-dev-mydomain-com-0: no TLS provided"
traefik       | time="2018-09-16T10:47:41Z" level=error msg="Skipping frontend frontend-Host-dev-mydomain-com-0..."

您能提出任何解决方案吗?谢谢。

我正在使用 Traefik 版本 1.6.6。

这是我的 docker-compose.yml 应用程序容器。

version: '3'
services:
  app:
    image: webdevops/php-nginx-dev:7.2
    networks:
      - proxy
    volumes:
      - ./:/app
      - ../traefik/ssl/*.mydomain.com.crt:/opt/docker/etc/nginx/ssl/server.crt
      - ../traefik/ssl/*.mydomain.com.key:/opt/docker/etc/nginx/ssl/server.key
    environment:
      - WEB_DOCUMENT_ROOT=/app
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:dev.mydomain.com
      - traefik.docker.network=proxy
      - traefik.port=443
networks:
  proxy:
    external: true

我的 Traefik 容器的docker-compose.yml。

version: "3"
services:
  traefik:
    image: traefik
    container_name: traefik
    command:
      - --api
      - --docker
      - --docker.exposedbydefault=false
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./ssl:/sslcert
networks:
  proxy:
    external: true

最后,我的 traefik.toml 文件。

debug = true
logLevel = "ERROR"
defaultEntryPoints = ["http","https"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]
    [[entryPoints.https.tls.certificates]]
      certFile = "/sslcert/*.mydomain.com.crt"
      keyFile = "/sslcert/*.mydomain.com.key"

[retry]

traefik 1.0 的答案(已过时)

passTLSCert 将 TLS 客户端证书转发到后端,即在 TLS 握手中发送证书以证明其身份的客户端。

Traefik 是一个 HTTP 反向代理。要直接与后端建立 SSL 连接,您需要反向代理 TCP 而不是 HTTP,并且 traefik 不(还?)支持 tcp(但在 github 上存在问题)。

Traefik 不适合您的用例,有不同的选择,envoy 是其中之一。

Traefik 现在在其新的 2.0 版本中支持 TCP - 目前仍处于 alpha 阶段(2019 年 4 月)。

查看公关 https://github.com/containous/traefik/pull/4587
https://github.com/containous/traefik/releases/tag/v2.0.0-alpha1 的 v2.0.0-alpha1 发行说明显示包含此 TCP 支持 PR

因此,一旦 2.0 发布(可能在 2-3 个月内),HTTPS 透传将成为可能。

TCP 路由器的新直通已经可用:https://docs.traefik.io/routing/routers/#passthrough