AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向

2023-12-03

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

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

由于我使用 Docker-Compose 文件,因此我没有 Traefik.toml,并且尝试在没有 Traefik.toml 的情况下完成此操作。

码头工人组成:

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 不知道它正在 elb 后面运行,因此它会一遍又一遍地进行重定向。但 Header 阻止了这种行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向 的相关文章

随机推荐

  • 使用 Pinterest 登录

    我可以在iPhone上轻松实现facebook登录 但我听说 pinterest 没有官方 API 所以我想知道是否有办法实现Pinterest登录 所以我的应用程序可以在用户使用 pinterest 登录后识别用户 没有官方 Pinter
  • 如何在 ASP.Net Core 1.1 中 Response.Cookies.Append()?

    我正在尝试将全球化添加到 Intranet 应用程序中 使用 cookie 来允许用户选择文化偏好 中间件已设置并正在运行 但我遇到了根据 UI 选择附加到 cookie 的问题 该方法直接来自 Asp Net Core 文档 如下所示 p
  • PHPExcel setCellValueByColumnAndRow 不将数据写入电子表格

    我正在使用 PHPExcel 将数据从 mysql 数据库输出到 Excel 工作簿 我的工作簿有 3 张纸 其中大部分工作正常 我在第三张纸的最后一部分输出时遇到问题 我想做的是输出一个带有行标题和列标题的表 其值取自mysql表 然后根
  • pip install --upgrade sqlalchemy 给出超出最大递归深度

    我试过了pip install upgrade sqlalchemy python2 7 setup py install 并在删除站点包中的 sqlalchemy 文件夹后 我尝试过pip install sqlalchemy 它们都给出
  • CSS 中“::”选择器的含义是什么

    我看到一篇博客文章 其中 在他们的 CSS 代码中使用了 这是他们的部分代码 webkit scrollbar width 10px 该代码对于滚动条工作正常 但我找不到定义此选择器的位置 这正式意味着什么 表示一个伪元素 而不是伪类 他们
  • 任务取消和任务继续选项

    昨天我刚刚了解了任务 TPL 因此我尝试做一个小示例项目 以便了解如何使用它们 我的示例项目设置了一个开始按钮 该按钮开始递增进度条 第二个按钮用于取消任务 用于报告何时调用使用 TaskContinuationOptions OnlyOn
  • 发出具有与声明发出类型相同类型的属性的类

    我已经找到了如何发出一个类 如下所示 class MyClass String MyProperty get set 无法弄清楚如何发出以下内容 class MyClass MyClass MyProperty get set 我面临的问题
  • 如何在使用 Netbeans 的构建过程中将文件夹包含到 dist JAR 中?

    我正在使用 Netbeans 6 9 并且我已研究过编辑 build xml 文件 以便可以将目录和文件包含在构建项目所产生的 jar 文件中 所以我的问题是如何修改 build xml 文件以将其他文件夹放入 jar 中 我的项目有以下目
  • 从 Java 方法返回时 BigDecimal 不保留实际值

    我正在用 Java 制作一个货币转换应用程序 其他一些很棒的 StackOverflow 专家建议我阅读 BigDecimal 以替换 double 来解决任何精度问题 我有两种方法系统 它将起始货币转换为美元 然后将美元价值转换为目标货币
  • 使用名称访问工作表上的自定义属性

    我正在尝试使用属性名称来访问工作表上的自定义属性 但似乎不支持此功能 至少在 C 中不支持 我看到其他人报告它可以在 VB 中工作 并且文档也这么说 有人可以确认这在 C 中不起作用吗 这是示例代码 activeWorkSheet Cust
  • 如何使用 javascript 将时间(上午 12:30)转换为时间戳?

    谁能告诉我该怎么做 我想比较2次 看看哪一次更大 比如中午 12 30 和下午 5 30 使用 Date parse Date parse 24 09 2011 15 21 41
  • Visual Studios Express - 更改调试输出目录

    有没有办法让 VS 项目将调试 EXE 构建到 bin debug 以外的目录 我找到了这个 http msdn microsoft com en us library ms165410 28v vs 80 29 aspx 但是 这仅适用于
  • 更改存储在基于哈希的集合中的对象的哈希代码

    我有一个基于哈希的对象集合 例如HashSet or HashMap 实施过程中会遇到哪些问题hashCode 因为它是根据一些可变字段计算的 所以它可以随着时间而变化 它如何影响休眠 有什么理由让hashCode 默认返回对象的ID是坏的
  • 如何将类及其成员函数分离到头文件和源文件中

    我对如何将简单类的实现和声明代码分离到新的头文件和 cpp 文件中感到困惑 例如 我如何分离以下类的代码 class A2DD private int gx int gy public A2DD int x int y gx x gy y
  • gitlab:调用 gitlab-shell

    我一直在浏览代码gitlab shell 我无法理解它是如何被调用的 如果我对我的服务器 安装了 gitlab shell 进行了拉取 那么 gitlab shell 如何知道它 bin gitlab shell有这一行作为评论 GitLa
  • 事件源的性能

    我目前正在开发一个大型项目 需要实现服务器发送的事件 我决定使用事件源传输 并从简单的聊天开始 目前客户端仅监听新的聊天消息事件 但项目将来会有更多事件 首先 我真的很关心服务器端脚本及其循环 其次 我不确定使用mySQL数据库作为存储 在
  • 如何提取 MongoError: E11000 找到重复键的错误消息?

    如何提取错误消息MongoError E11000发现重复的钥匙 我只想要错误本身消息而不是整个对象 我将用一个例子来解释这一点 在mongo shell db test insertOne id 1 insert a document t
  • 在过去 365 天窗口中执行运行总计的有效方法

    这就是我的数据框的样子 库 数据 表 df lt fread Name EventType Date SalesAmount RunningTotal Runningtotal prior365Days John Email 1 1 201
  • 仅第一次记录显示,除非强制处置

    我正在使用 vs 2017 写一个netcoreapp2 0库 并使用 UnitTest 项目对其进行测试 XUnit 和 NUnit 给出相同的结果 我注意到除非我强行处置我的Serilog记录器 只有第一行会出现在Seq 这是我的两堂课
  • AWS 负载均衡器后面使用 Traefik 进行 HTTPS 重定向

    我正在尝试将所有传入的 Traefik 从 http 重定向到 https 以便从具有自定义端口的 docker 容器提供服务的 Web 应用程序 如果我构建这个 docker compose 文件 并扩展应用程序 一切都会按预期工作 我能