首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTPS-在Aws负载均衡器后面使用Traefik重定向

HTTPS-在Aws负载均衡器后面使用Traefik重定向
EN

Stack Overflow用户
提问于 2018-03-07 09:41:31
回答 1查看 5.1K关注 0票数 3

我正在尝试将所有传入Traefik从http重定向到https,以便从带有自定义端口的docker容器中获得web应用程序服务。

如果我构建这个docker组合文件,并按比例缩放应用程序,一切都按预期工作。我能够请求应用程序的http和https,但我试图实现这一点,只有https才能得到服务,而http被重定向到https。

由于我使用的是一个Docker文件,所以我没有Traefik.toml,所以尝试在没有一个文件的情况下完成这个任务。

码头组合:

代码语言:javascript
复制
traefik:
  image: traefik:latest
  command:
   - "--api"
   - "--docker"
   - "--docker.domain=example.com"
   - "--logLevel=DEBUG"
   - "--docker.watch"
  labels:
    - "traefik.enable=true"
  ports:
    - "80:80"
    - "8080:8080"
    - "443:443"
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /dev/null:/traefik.toml

application:
  image: application
  command: web
  tty: false
  stdin_open: true
  restart: always
  expose:
    - "8081"
  labels:
    - "traefik.backend=application"
    - "traefik.frontend.rule=HostRegexp:{subdomain:[a-z]+}.example.com"
    - "traefik.frontend.priority=1"
    - "traefik.enable=true"
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock

我尝试了应用程序容器的不同变体,例如:

代码语言:javascript
复制
- "traefik.frontend.entryPoints=http,https"
- "traefik.frontend.redirect.entryPoint=https"
- "traefik.frontend.headers.SSLRedirect=true"

但是,我可以完成的最大任务是使用SSLRedirect标签进行到多个重定向响应,如果没有从traefik获得以下信息,那么http或https请求都不会被正确转发。

代码语言:javascript
复制
 level=error msg="Recovered from panic in http handler: runtime error: invalid memory address or nil pointer dereference"

有人能把我推向正确的方向吗?

(预先谢谢;)

我在以下设置下运行

代码语言:javascript
复制
 user:~$ docker --version
 Docker version 1.13.1, build 092cba3

 user:~$ docker-compose --version
 docker-compose version 1.8.0

码头PS响应

代码语言:javascript
复制
IMAGE           COMMAND                 ... PORTS                                                              NAMES
application     "dotnet Web..."         ... 8081/tcp                                                           components_application_1
traefik:latest  "/traefik --api --..."  ... 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8080->8080/tcp   components_traefik_1

基础设施设置

代码语言:javascript
复制
 aws-elb => vpc => ec2...ecn 
                   traefik per instance, 
                   n applications per instance
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 15:44:22

只有在traefikv1.7之后,在v2.*之后,才能工作。*您需要另一个配置设置,我还没有弄清楚这一点,

经过更深入的研究,我自己找到了解决方案。

问题是在我添加了应用程序容器之后,缺少了一个标签

代码语言:javascript
复制
- "traefik.frontend.headers.SSLProxyHeaders=X-Forwarded-Proto: https"
- "traefik.frontend.headers.SSLRedirect=true"

在我的应用程序容器中,它的工作方式就像一个明显的301重定向的魅力。

为什么需要报头,默认情况下,aws接受一个https请求,并将它用一个HTTP(80)转发到连接的实例,在此过程中,该进程将X-Forwarded-Proto: https头添加到请求中。

因为traefik不知道它在elb后面运行,所以它一次又一次地重定向。但是头文件会停止这种行为。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49148624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档