ssl - HTTPS 连接在几分钟后停止工作
问题描述
我有以下设置:
- 运行 5 台计算机的 Service Fabric 集群,在 Docker 容器中运行多个服务
- 一个开放 443 端口的公共 IP,转发到运行 Traefik 的服务
- Traefik 终止 SSL,并将请求代理到通过 HTTP 请求的服务
这是我得到的行为:
- 对 https:// 的第一个请求非常非常慢。Chrome 通常会在超时或“无内容”错误后最终加载它。Powershell 中的 Invoke-WebRequest 通常只是超时并显示“底层连接已关闭”消息。
- 但是,一旦加载,我可以刷新内容或再次运行命令,它会非常非常快速地响应。只要 URL 有正常流量,它就会起作用。
- 如果我离开一会儿(不确定时间,肯定是几分钟),它就会死去并回到起点。
我的问题:
什么会导致 SSL 握手中断或永远持续?这个堆栈中的哪个组件是罪魁祸首?Service Fabric 中的某些内容是否超时?这是Traefik的事情吗?如果它更稳定,我可以切换到 Nginx。我们在 IIS 上使用这些相同的证书,我们没有这个问题。
我可以使用 New Relic 之类的东西每分钟不断地发送一个 ping 以保持活动状态,但我宁愿弄清楚为什么连接会在几分钟后断开。
调试此问题的最佳方法是什么?我在 Traefik 日志文件中看不到任何内容(在 DEBUG 模式下),实际上当它没有连接时,访问日志中根本没有请求记录。任何可以帮助调试的工具?谢谢!
解决方案
Traefik 服务在所有5 个节点上是否健康,您可以检查所有 5 个实例的日志吗?如果不是,这可能会导致 Azure 负载平衡器在 Traefik 未侦听的节点之间进行负载平衡,这会导致响应间歇性和缓慢。一旦一个健康的 Traefik 响应,您将获得一个粘性会话 cookie,这将使后续响应更快。您可以为 Traefik 日志启用 ApplicationInsights 监控,以节省您在所有机器上的爬网:https ://github.com/jjcollinge/traefik-on-service-fabric#debugging. 我还建议在不使用 SSL 的情况下进行测试,以确保 Traefik 可以首先通过 HTTP 正确路由,然后添加 HTTPS。这样你就会知道这与 SSL 配置有关(即正确安装证书、Traefik toml 配置、可信证书等)
推荐阅读
- asp.net-web-api2 - 在哪里将 DTO 映射到实体以在存储库中创建/添加方法
- laravel - 如何在 Laravel 中进行角色库访问?
- c++ - 为什么数字输出会受到 cout 语句的影响?
- facebook - FACEBOOK GRAPH API - 查找用户发表的所有评论
- go - 没有接收器的模拟功能
- azure-devops - Azure Devops - [DataTestMethod] 类型的单元测试方法未在 YAML 构建中执行
- javascript - 对 js if 语句使用 ejs 输入
- c# - 我怎样才能对这个值求和?
- firebase - Flutter:使用不同的 documentID 将列表上传到 Firestore
- typescript - Typescript 的“对象”类型错误中不存在属性