Traefik配置问题:URL自动跳转HTTPS但站内链接未跳转
解决站内链接未跳转至HTTPS的问题
嘿,我来帮你搞定这个站内链接没法自动跳转到HTTPS的问题~结合你给出的Traefik配置,咱们从这几个方向入手:
1. 启用全局HTTP到HTTPS的强制重定向
你现在把traefik.toml里的HTTP重定向配置注释掉了,虽然你的主URL能重定向,但大概率是某个服务单独配置了重定向规则,站内其他HTTP链接没被覆盖到。咱们先把全局重定向打开,兜底所有HTTP请求:
修改traefik.toml的entryPoints.http部分,取消注释重定向配置:
[entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" # 取消这两行的注释 [entryPoints.https] address = ":443" [entryPoints.https.tls] [[entryPoints.https.tls.certificates]] certFile = "/etc/traefik/ssl/ee.crt" keyFile = "/etc/traefik/ssl/private.key"
这样一来,任何访问HTTP端口的请求都会被自动转去HTTPS,哪怕站内链接是HTTP格式,用户点击后也会被Traefik强制跳转。
2. 让应用生成HTTPS格式的站内链接
如果全局重定向后,页面里的站内链接还是显示HTTP(只是点击后跳转),那问题出在应用本身——它不知道自己是通过HTTPS反向代理提供服务的,所以生成的链接默认用HTTP。这时候咱们给服务加个Traefik中间件,传递正确的协议头:
在docker-compose.yml对应服务的labels里添加这些配置(记得把your-service-name换成你实际的服务路由名称):
labels: - traefik.enabled=true # 添加自定义请求头,告诉应用当前用的是HTTPS协议 - traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https # 把这个中间件绑定到你的服务路由上 - traefik.http.routers.your-service-name.middlewares=sslheader@docker
这样应用收到请求时,会通过X-Forwarded-Proto头知道当前是HTTPS环境,生成的站内链接就会自动用HTTPS了。
3. 重启服务验证配置
修改完配置后,重启Traefik和对应的应用服务,让配置生效:
docker-compose down && docker-compose up -d
之后你可以试试点击站内的HTTP链接,看看是否直接跳转到HTTPS,同时检查页面源码里的链接是否已经是HTTPS格式啦~
内容的提问来源于stack exchange,提问作者To Dac Huy
相关产品推荐
相关产品推荐

