您如何让traefik在HTTPS重定向之前处理HTTP重定向?

时间:2018-08-13 04:38:17

标签: traefik

我工作的公司目前正在使用nginx作为反向代理。 它对我们很有用,但是我正在考虑将某些服务器从使用VM切换为使用docker容器,并希望切换为使用traefik。

我一直在使用traefik,虽然它似乎可以很好地与容器配合使用,但是我在复制现有的某些nginx功能时遇到了麻烦。

当前,我们的nginx配置如下:

if request is coming in on port 80
    if HOST field says "domainA.com"
        redirect to http://someplace.com
    if HOST field says "domainB.com"
        redirect to http://someplace.com
    otherwise
        redirect this HTTP request to HTTPS

没有HTTPS重定向,此配置似乎可以很好地工作:

defaultEntryPoints = ["https", "http"]
[file]

[frontends]
    [frontends.frontend1]
    backend = "backend1"
        [frontends.frontend1.routes.test_1]
        rule = "Host:domainA.com,domainB.com"

[backends]
    [backends.backend1.servers.server1]
    url = "http://someplace.com"

问题是,当我添加推荐的方法来添加HTTPS重定向时,它具有优先权,这会破坏上述HTTP重定向:

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

    [entryPoints.https]
    address = ":443"
        [entryPoints.https.tls]

是否有适当的方法来执行此操作,以便仅在其他HTTP规则不匹配时才发生HTTPS重定向?

更新:

我似乎越来越近了。如果我添加以下内容,而不是[entryPoints]部分:

[frontends.frontend2]
backend = "backend2"
    [frontends.frontend2.headers]
    SSLRedirect = true

几乎可以使用。问题是,我需要将其指向特定的后端,而不是仅仅将其发送回https入口点以通过LetsEncrypt(如果没有证书)并从那里路由。

也许后端定义可以将流量发送回入口点,这可能有效,但是据我阅读文档所知,这是不可能的。

0 个答案:

没有答案