在 Elastic Search 上通过 https 部署 PHP webapp

Deploy PHP webapp over https on Elastic Search

在我的公司,这是我们第一次使用 AWS Elastic Beanstalk 部署网络应用程序,我们很难让它在 https 上运行。该应用程序在单个节点中 运行(我们没有使用负载均衡器),并且是在 EB 平台 v3.3.10 上使用 PHP 8.0 运行 中的 CodeIgniter 3 编写的。现在我们有一个在 http 上工作的环境,同时我们尝试让它在 https 上工作。

我们使用 Apache 作为代理服务器,我们已经生成了文档中提到的配置文件。但是我们在部署过程中不断收到错误: deployment error snapshot

为了简化事情,我们开始尝试部署一个简单的“hello world”应用程序并使其在 https 上运行,但我们一直在失败......我们不知道我们失败了什么,我们做错了什么...

我们制作的配置文件如下。

https-实例-single.config

Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

https-instance.config

packages:
  yum:
    mod24_ssl : []

files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule ssl_module modules/mod_ssl.so
      Listen 443
      <VirtualHost *:443>
        <Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>

        SSLEngine             on
        SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol           All -SSLv2 -SSLv3
        SSLHonorCipherOrder   On
        SSLSessionTickets     Off
        
        Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        
        ProxyPass / http://localhost:80/ retry=0
        ProxyPassReverse / http://localhost:80/
        ProxyPreserveHost on
        RequestHeader set X-Forwarded-Proto "https" early
      </VirtualHost>
  
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      My certificate
      -----END CERTIFICATE-----
  
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      My private key
      -----END RSA PRIVATE KEY-----

“有趣”的是,如果我们将 mod24_ssl 更改为 mod_ssl,它不会' 在部署时产生错误,但它仍然不起作用并且不暴露 443 端口。我们已经用telnet查过了,已经关闭了。

我们已在安全组中检查启用了 HTTP 和 HTTPS 入站流量。

我们假设我们不是第一个遇到这个问题的人,这可能是我们做错了什么,希望能很容易地解决这个问题。因此,如果有人读到这篇文章并知道它可能是什么,我们非常感谢您提供的任何帮助。

谢谢

版本 3.3.10 基于 Amazon Linux 2 (AL2),但是您所有的设置都是针对 AL1 的,在新版本中不起作用。

要 属性 在基于 AL2 的 EB 中设置 httpd,您必须使用 .platform 文件夹,而不是 .ebextentions。所有详细信息都在 Reverse proxy configurationConfiguring Apache HTTPD 部分下的 AWS Docs 中。