使用 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
我需要将 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