当前位置: 首页 > 面试题库 >

HTTPS-Redirect和AWS负载均衡器背后的Traefik

施海
2023-03-14
问题内容

我正在尝试将所有传入的Traefik从http重定向到https,用于Web应用程序,该应用程序从具有自定义端口的docker容器中获取。

如果我构建了这个docker
compose文件,并扩展了应用程序,一切将按预期工作。我可以请求应用程序的http和https,但是我尝试实现仅提供https并将http重定向到https的目的。

由于我使用的是Docker-Compose文件,因此我没有Traefik.toml,并尝试在没有一个文件的情况下完成此任务。

Docker撰写:

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

我尝试对应用程序容器进行不同的更改,例如:

- "traefik.frontend.entryPoints=http,https"
- "traefik.frontend.redirect.entryPoint=https"
- "traefik.frontend.headers.SSLRedirect=true"

但是我能完成的最大任务是使用SSLRedirect标签进行多次重定向响应,并且没有从traefik获得以下内容,并且http或https请求都无法正确转发。

 level=error msg="Recovered from panic in http handler: runtime error: invalid memory address or nil pointer dereference"

谁能将我推向正确的方向?

提前致谢 ;)

我在以下设置下运行

 user:~$ docker --version
 Docker version 1.13.1, build 092cba3

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

Docker PS响应

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

基础设施设置

 aws-elb => vpc => ec2...ecn 
                   traefik per instance, 
                   n applications per instance

问题答案:

这只适用于traefik v1.7,在v2之后。*您需要另一个配置设置,我还没有弄清楚

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

问题是我添加后,应用程序容器上缺少标签

- "traefik.frontend.headers.SSLProxyHeaders=X-Forwarded-Proto: https"
- "traefik.frontend.headers.SSLRedirect=true"

在我的应用程序容器上,它具有明确的301重定向的魅力。

为什么在默认情况下aws-
elb需要标头,所以会接受一个https请求,并通过HTTP(80)将其转发到连接的实例,在此过程中,elb将X-Forwarded-Proto: https标头添加到请求。

由于traefik不知道它在肘部后面运行,因此它会一遍又一遍地进行重定向。但是页眉停止了此行为。



 类似资料:
  • 我在将https添加到我的EC2实例时遇到了一个问题,也许你们可以找到让它工作的答案。 我有一个负载平衡器,它正在将连接转发到我的EC2实例,我已将SSL证书添加到负载平衡器,一切正常,我已将侦听器添加到端口443,该端口将转发到我的实例的端口443,我已将Apache配置为在端口443和80上侦听,现在这里是我的负载平衡器的屏幕截图: SSL证书有效,在端口80(HTTP)上一切正常,但如果我尝

  • 当在处理SSL连接并将其作为HTTP发送给您的EC2负载平衡器后面时,什么是一种干净的Symfony方式来确保HTTPS在Symfony2中使用。 如果你做了类似的事情requires_channel你会在HTTPS的初始更改后得到一个重定向循环,因为在网络服务器上你仍然在做HTTP。网址确实显示了HTTPS,亚马逊也提供了一个X-FORWARDED-PROTO标头来使用。 有没有一种干净的方法让

  • 我有一个在AWS上运行的项目。结构如下: 我已使用AWS证书管理器为负载平衡器创建了一个证书。所以现在的流量是: 但由于加载网页时实例上没有证书,因此会收到“站点不安全”警告。 如何创建从客户端到负载均衡器后面的任何实例的完整SSL连接? 编辑 以下是nginx配置(适用于所有实例)

  • 我正在尝试使用ELB部署一些nodejs站点,但ELB和EC2实例的安全组都存在一些问题。 我想做的是允许ELB接受端口80请求,并将这些请求转发到EC2实例上的端口3000,我不希望EC2实例可以从Internet直接访问,它们应该只能通过负载均衡器(在端口3000上)访问。 因此,在我的公有子网的 VPC 中,我有: < li >设置转发80 (HTTP)到3000 (HTTP)的ELB <

  • 我试图为我们的服务器安装负载平衡器。如果使用http,它可以正常工作。但是当我切换到https时 我在浏览器控制台中遇到以下错误: 混合内容:页面位于'https://www.something.com/'通过HTTPS加载,但请求了一个不安全的脚本'…mootools.js'。此请求已被阻止;内容必须通过HTTPS提供 我想我做了一些硬代码,比如“http://www.something.com

  • 目标是在一个简单的堆栈中包含 HTTP/2 支持:在多个 EC2 实例中部署的 Web 应用程序是启用了 PROXY 协议策略 (SSL:443 ➝ TCP:80) 的传输级 CLB,以便卸载 SSL/TLS 并平衡传入的 HTTPS 流量。 PROXY协议的几个原因:(1)地理定位逻辑的执行;(2)执行简单的访问控制规则;(3)日志记录。所有这些功能都需要访问可靠的(即不可轻易伪造的)客户端IP