【问题标题】:Configure WampServer3 to work with AWS Certificate Manager, Application Load Balancer over port 443将 WampServer3 配置为通过端口 443 与 AWS Certificate Manager、Application Load Balancer 一起使用
【发布时间】:2024-05-20 02:20:02
【问题描述】:

问题:

是否可以使用 WampServer3(Apache、PHP、MySQL)通过端口 443 与我的应用程序负载均衡器一起工作?如果有怎么办?

问题:

目前,我的应用程序负载均衡器已连接到我的实例,并且我有 2 个侦听器,端口 80 和端口 443。端口 443 上的侦听器附加了一个由 AWS Certificate Manager 生成的 SSL 证书。

  • 我正在侦听端口 80 的目标组运行状况良好且工作正常。
  • 我正在侦听端口 443 的目标组运行状况不佳并且超时。

我知道端口 443 由于 Apache 设置而失败,但我不确定我应该如何在 Apache 中启用该端口。

根据我阅读的所有内容,Apache 要求您拥有 SSL 的物理文件和密钥,以便它允许通过端口 443 的请求。我尝试在没有这两件事的情况下按照说明进行操作,但 WampServer3 不会在没有他们的情况下重新启动。

我觉得必须有办法让它发挥作用,但我碰壁了。也许我没有在寻找正确的东西,或者我缺少一个需要使用的附加模块。

TLDR:由于无法物理下载 AWS Certificate Manager 生成的 SSL,我如何在没有文件或密钥的情况下使其在 Windows 10 上与 Apache 一起使用?

编辑

所以据我了解,我不仅需要将下面的重写代码放在我的<VirtualHost>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

我还需要将X-Forwarded-Proto: https 放在healthcheck.php 页面顶部<html> 标记之前?我会继续阅读这个,因为我不完全理解它。

【问题讨论】:

  • 如果我做对了,我建议您发布该编辑作为详细说明修复的答案。它有助于避免未来访客的混淆。谢谢。
  • 感谢@Bugs,我已将其发布为答案。

标签: apache amazon-web-services wamp amazon-elb elastic-load-balancer


【解决方案1】:

您在负载均衡器的 80 和 443 上都有一个侦听器。 443 上的监听器拥有 ACM 证书。

您还说每个听众都有一个目标群体 - 一个在 80 上表示健康,一个在 443 上表示不健康。

简单的答案是为两个听众使用一个目标群体。这样,如果最终用户通过 443 进入,与最终用户的连接是安全的,并且只有 ALB 和实例之间的内部流量使用 HTTP。这样,运行状况检查就会成功,您的用户将能够使用该网站。

但这并不是大多数人真正想要的——他们想要端到端的安全性,而且很可能他们想要从端口 80 重定向到 443。

要强制每个人都使用 443,您需要在 apache 配置中设置一个重定向规则,以检查传入连接是否安全。由于 SSL 在 ALB 上终止,因此您需要检查 X-Forwarded 标头值之一(请参阅 this)并在 X-Forward-Port 为 80 时重定向。

为确保端到端流量安全,您可以将侦听器配置为侦听端口 443 而不是端口 80。您可以为此使用自签名证书,而且我相信某些版本的 Linux 附带默认证书。 ALB 不会进行证书验证。

编辑:

在评论中,有一个关于将重写代码放在哪里的问题:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} =http 
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

如果您只有一个条目,那么这应该可以工作。如果您有单独的端口 80 和 443 条目,并且您正在使用具有不同侦听器的自签名证书,那么您需要将其放入端口 80 虚拟主机条目中。

【讨论】:

  • 嗨,克里斯,感谢您的回答。我试图使用这种方法无济于事。我相信这是因为我的 ELB 是 Application Load Balancer 而不是 Classic Load Balancer。我开始认为它只是行不通。不过,我可能会尝试将其切换到 Classic Load Balancer,看看这是否真的会有所作为。
  • 哪些部分?我们始终使用一个目标组来处理 ALB 后面的 80 和 443 流量,并在端口 80 流量上进行重定向。另一个潜在问题:一些应用程序框架试图确定连接是否安全(hello,tomcat),并且需要将它们配置为查看 X-Forwarded 标头而不是默认服务器变量。
  • 我认为我阅读该链接的速度太快了,现在我开始认为我没有正确执行。我尝试使用RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =httpRewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent],但认为不需要其他任何东西。 X-Forwarded-Headers 到底应该去哪里?在 healthcheck.php 文件中?还是在带有 Rewrite 的 VirtualHost 中?
  • 我快速阅读了一些关于 HTTP 标头的内容,请参阅我的问题的编辑。如果我仍然缺少一块拼图,请告诉我。
【解决方案2】:

我最终根本没有使用 AWS Certificate Manager,因为必须克服一些障碍才能使其正常工作。

相反,我找到了一个免费提供 SSL 证书的好资源 - LetsEncrypt。由于易于使用,我强烈推荐这个解决方案给每个人。此外,他们似乎得到了许多知名公司的支持。

【讨论】:

    最近更新 更多