【问题标题】:ELB and Apache configuration for HTTPS websiteHTTPS 网站的 ELB 和 Apache 配置
【发布时间】:2013-06-15 00:10:00
【问题描述】:

我正在为 https 网站设置 ELB,但我对端口配置有疑问...

现在我在 ELB 上有这个端口配置:

  • 80 (HTTP) 转发到 80 (HTTP)
  • 443 (HTTPS) 转发到 80 (HTTP)

在我的实例上,我有这个 Apache 配置:

显然它正在工作,但这是正确的做法吗?

感谢您的帮助

席琳

PS:当我开始配置 ELB 时,我指示 443 转发到 443,但后来我不得不回答奇怪的身份验证问题...

【问题讨论】:

    标签: apache https amazon-web-services amazon-ec2 amazon-elb


    【解决方案1】:

    问题中描述的配置不起作用,因为它创建了一个永无止境的重定向:443(ELB) 转发到 80(Apache) 转发到 443(ELB) 转发到 80(Apache) 转发到 443(ELB)等。

    所以,我修改了ELB配置:

    • 443 (HTTPS) 转发到 443 (HTTPS)
    • 80 (HTTP) 转发到 80 (HTTP)

    当我创建侦听器 443 (HTTPS) 转发到 443 (HTTPS) 时,我没有回答有关身份验证的问题。当我查看 ELB 描述时,我可以看到“后端身份验证:已禁用”

    健康检查在 HTTPS:443 上完成

    (我还修改了实例安全组:只有负载均衡器可以访问80和443端口的实例)

    更新:

    另一种解决方案是在实例上只打开端口 80:

    • 80(HTTP)转发到80(HTTP)
    • 443 (HTTPS) 转发到 80 (HTTP)

    但要使用 X-Forwarded-Proto 来确定客户端是使用 HTTP 还是 HTTPS,并且仅当 X-Forwarded-Proto = http 时才转发到 HTTPS

    Apache 示例:

    <VirtualHost *:80>
        ...
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
        ...
    </VirtualHost>
    

    已添加行 RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker,因此不会重定向 ELB 检查。有关健康检查的其他解决方案,请参阅https://serverfault.com/questions/470015/how-should-i-configure-my-elb-health-check-when-using-namevirtualhosts-and-redir

    有关 X-Forwarded-Proto 的 AWS 文档:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html#x-forwarded-proto

    【讨论】:

    • 很好的答案。确保将端口 80 ELB 侦听器指定为 HTTP未指定证书 -- 如果指定 HTTPS,您将得到:400 Bad Request -- 普通HTTP 请求已发送到 HTTPS 端口
    【解决方案2】:

    这是一种有效的方法。您可以让 ELB 处理 SSL 终止。

    在某些合规情况下,整个路径必须一直加密到实例。如果这不适用于您,那么您无需进行任何更改。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 2019-08-01
      • 2021-05-30
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多