我工作的公司目前正在使用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(如果没有证书)并从那里路由。
也许后端定义可以将流量发送回入口点,这可能有效,但是据我阅读文档所知,这是不可能的。