我在一个带有牧场后端的AWS实例上运行traefik。我在AWS负载均衡器处终止SSL,并在端口80上与实例进行通信,该实例将:80流量转发到traefik容器。
所以负载均衡器目前有: https:443 ==> HTTP:80 http:80 ==> HTTP:80
这意味着,如果您输入https://example.com,则会获得SSL,如果您输入http://example.com,则只会获得普通的http连接。
希望通过http 302进行自动重定向 - 它会将http://example.com重定向到https://example.com。
到目前为止,我尝试失败的原因如下:
** AWS负载均衡器**
https:443 => HTTP:80
http:80 => HTTP:81
traefik.toml
------------
[entryPoints]
[entryPoints.http]
address = ":81"
[entryPoints.http.redirect]
regex = "^http://example.com/(.*)"
replacement = "https://example.com/$1"
address = ":80"
docker-compose.yml
------------------
API-Proxy:
container_name: api-proxy
image: traefik
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "$PWD/traefik.toml:/etc/traefik/traefik.toml"
command: "--web --rancher --docker.domain=rancher.localhost --logLevel=DEBUG"
cpu_shares: 128
restart: always
ports:
- 80:80/tcp
- 81:81/tcp
- 8100:8080/tcp
当我尝试通过端口80访问时,会出现超时。 Traefik日志似乎没有帮助。
这是一种愚蠢的做法吗?或者,使用Let's encrypt?
更好地在traefic容器上终止SSL答案 0 :(得分:2)
在Traefik配置中尝试这样的操作。然后将LB上的端口443和80转发到Traefik上的端口80。
(py35x64_test) E:\Work\Dev\StackOverflow\q048571060>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code.py
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<_1ELEMENT0> text 1ELEMENT0 </_1ELEMENT0>
<ELEMENT0> text ELEMENT0 </ELEMENT0>
<_11ELEMENT1> text 11ELEMENT1 </_11ELEMENT1>
<ELEMENT1> text ELEMENT1 </ELEMENT1>
</root>
_1ELEMENT0 - [ text 1ELEMENT0 ]
ELEMENT0 - [ text ELEMENT0 ]
_11ELEMENT1 - [ text 11ELEMENT1 ]
ELEMENT1 - [ text ELEMENT1 ]
答案 1 :(得分:1)
我目前在AWS上的Kubernetes中这样做。要做得恰到好处,这有点蠢,但这完全有可能。
首先,您需要确保您的ELB正在侦听端口80上的HTTP(而不是HTTPS)以及端口443上的HTTPS。如果ELB在端口80上侦听HTTPS,则会产生非常奇怪的行为客户端。先检查一下。 注意:如果您使用Helm部署了Traefik,则这是默认行为。
使用aws elb describe-load-balancers
打印出所有ELB。你必须在那里找到ELB(我不知道如何告诉你它是哪一个)并查看LoadBalancerDescriptions[].ListenerDescriptions[].Listener.Protocol
和InstanceProtocol
以确保它们是{{1}分别和HTTPS
。
其次,您只需要HTTP
:
config.toml
说明:
ELB应该将端口80映射到端口80,将端口443映射到端口8880.现在所有HTTP流量将自动重定向(使用 [entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
regex = "^http://(.*)"
replacement = "https://$1"
[entryPoints.httpn]
address = ":8880"
compress = true
进行测试)到HTTPS并在ELB处终止并作为HTTP转发到Traefik。
我仍然在寻找一种在部署时为ELB侦听器指定协议的好方法,但除了在部署Traefik后通过AWS控制台手动更改它们之外,我还没有找到一个好的解决方案。