【问题标题】:What changes require in LEMP stack for session handling over HTTPS with AWS Certificate Manager (ACM) and EC2 server running behind ELB?使用 AWS Certificate Manager (ACM) 和在 ELB 后面运行的 EC2 服务器通过 HTTPS 处理会话需要 LEMP 堆栈进行哪些更改?
【发布时间】:2018-04-07 17:59:18
【问题描述】:

我知道我可以使用 AWS Certificate Manager(ACM) 来获取通配符 SSL,即 *.example.com。

在 ACM 中创建的 SSL 证书可以在运行在 AWS ELB 后面的 EC2 上使用。

当 AWS ELB 从端口 443 向端口 80 上的 EC2 发出请求,浏览器中的 URL 仍在 HTTPS 上,内部 PHP 在 HTTP 上运行(不在 nginx 配置中侦听到 443)时,会出现问题,因此会话无效,并且应用程序注销流程发生并且会话无效。

我不知道如何解决这个问题,或者如何在没有 SSL 的情况下在 nginx 中配置端口 443?

PS

由于亚马逊不提供从 ACM 下载 SSL 私钥和公钥以通过端口 443 在 EC2 nginx 配置上设置 SSL 的选项。

【问题讨论】:

  • 我怀疑这是 SSL 证书本身的问题。您在负载均衡器后面有多少台 EC2 服务器?您是否在负载均衡器上启用了粘性会话?

标签: amazon-web-services nginx amazon-ec2 ssl-certificate elastic-load-balancer


【解决方案1】:

当您将 SSL 添加到负载均衡器而不是您的实例时,您不必处理配置密钥或侦听新端口的问题。就 Web 服务器而言,您仍然在 HTTP 下运行,这有它自己的问题。

幸运的是,AWS 领先一步,have a header 我们可以用于此目的,如下例所示:

server {
  listen 80;
  server_name yoursitename;
  root /path/to/web/dir;

  index index.php;

  proxy_set_header X-Forwarded-Proto $scheme;
  if ( $http_x_forwarded_proto != 'https' ) {
    return 301 https://$host$request_uri;
  }

  location ~ \.php$ {
      # PHP conf
  }
}

您可能还需要编辑应用程序中的设置,告诉它您正在使用 HTTPS。这可能在配置文件或数据库中的设置中。

您现在很可能会收到一些不安全的内容警告。您不能通过 HTTPS 加载不安全的内容,因此请确保您没有通过 HTTP 加载任何图像或脚本。如果您想了解更多信息,Google Developers 对此so give it a read 有一个很好的指南。

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 2018-12-27
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2016-05-12
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多