使用 CloudFlare + AWS Application LoadBalancer 获取错误 522

Getting Error 522 with CloudFlare + AWS Application LoadBalancer

从 ALB 访问 80 或 443 端口时出现错误 522 或 521 link 它正在工作(对于 443 浏览器显示警告,即因为 ALB 和 SSL 域不同)

AWS 配置。

  1. 创建了具有 1 个 public 子网和 1 个私有子网的自定义 VPC
  2. 已创建 AutoScaling 组
  3. 已创建负载均衡器(http 和 https 的两个侦听器转发到目标组)和目标组(两个目标指向端口 80 和 443 上的 Ec2 实例以进行健康检查)-> 健康检查正在通过。
  4. 在私有子网中启动了 Ec2 实例(无 public ip),实例只能由应用程序负载均衡器安全组访问。

Ec2 和 Apache2 配置。

  1. 在 apache2 中启用了 SSL

  2. 实例开放443端口,ALB安全组访问80(http)和443(https)端口

  3. 对于 SSL 遵循文章 https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-18-04

已从 CloudFlare 生成 SSL 证书

  1. SSL/TLS -> 源服务器 -> 生成的 RSA 证书

  2. 已将 SSL 证书导入 AWS ACM

  3. 已将 ACM SSL 证书附加到 Loadbalancer HTTPS 侦听器

  4. 同时创建 AWS ACM SSL 证书并使用 DNS 进行验证以进行测试尝试了两个 ssl 证书 - 没有用

子域和 ALB link

  1. 在 CloudFlare 中创建了 DNS CNAME 条目

  2. 添加了指向 ALB link 的子域。 (仅尝试使用代理和 DNS)

  3. 你的SSL/TLS加密模式是Full

  4. 始终使用 HTTPS:开启

在正常 window(浏览器)中访问子域时,它第一次获得 522 并且在隐身模式下它可以工作,但之后就不行了。

https://subdomain.domain.com 发出 curl 请求时始终有效

在 Public 子网中创建了完全相同的实例,并 link 使用另一个子域(在 cloudflare 中创建)进行测试 -> 正常工作。

还尝试为端口 443 (HTTPS) 添加单独的目标组 -> 在此目标组中运行状况检查失败,而在端口 80 (http) 的其他目标组中同样有效

我不知道如何解决这个问题,请帮忙! 谢谢你。 请帮忙!

问题是因为面向互联网的负载均衡器在 public 和私有子网中可用,并且由于私有子网,sloudflare 无法连接到私有子网中的 ec2 实例。 负载均衡器子网部分显示 You are creating an internet-facing Load Balancer, but there is no Internet Gateway attached to these subnets you have selected 警告。

解决方案:https://aws.amazon.com/premiumsupport/knowledge-center/public-load-balancer-private-ec2/