apache - HTTPS 网站的 ELB 和 Apache 配置

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

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

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

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

  • 在我的实例上,我有这个 Apache 配置:
  • 对 *:80 的请求重定向到 https://www.mywebsite
  • *:443 已配置

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

    感谢您的帮助

    席琳

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

    最佳答案

    问题中描述的配置不起作用,因为它创建了一个永无止境的重定向: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

    关于apache - HTTPS 网站的 ELB 和 Apache 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174626/

    相关文章:

    symfony - 部署后运行 Elastic Beanstalk 命令

    php - Apache 上的 Docker,如何将变量传递给我的 PHP Web 应用程序?

    apache - 将空格、%20 和 + 替换为连字符

    http - 如何获取此网址?获取 SSL 握手错误

    node.js - Socket.io 与 NGINX 和 http 2

    amazon-web-services - 与 Rackspace 服务器一起使用的理想 AWS 区域是什么?

    PHP 自动加载自己的类和 AWS SDK

    java - 识别 Tomcat 上的服务器(HttpServletRequest.getLocalAddr() 失败)

    apache - URL 后面的双斜杠

    javascript - ssl 版本或密码不匹配 ExpressJS