在 ELB 后面使用 AWS Certificate Manager (ACM) 和 EC2 服务器 运行 通过 HTTPS 处理会话时,LEMP 堆栈需要进行哪些更改?

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) 来获取通配符 SSL,即 *.example.com.

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

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

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

PS

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

当您将 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 如果您想了解更多,开发人员对此有很好的指导 so give it a read