AWS Elastic Beanstalk .ebextensions文件创建不工作(apache config)

hmtdttj4  于 2023-06-06  发布在  Apache
关注(0)|答案(2)|浏览(315)

按照https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-singleinstance-php.html上的说明,我一直在尝试添加SSL证书,以便为我的单示例环境提供https。
我在这上面花了很多时间快把我逼疯了。
我的重要发现是:

  • 部署后,如果扩展脚本执行无误,则不会创建 /etc/httpd/conf.d/ssl.conf。或者以后会被覆盖。无论如何,SSL证书都不起作用
  • 在部署之后,例如,如果我尝试创建2个相同的ssl.conf文件-导致错误(模块ssl_module已经加载,跳过),则创建该文件

我在重新部署并检查/etc/httpd/conf.d/后,通过SSHing到EC2示例上进行测试。
我在站台上奔跑:* 在64位Amazon Linux 2/3.1.2上运行的PHP 7.4 *
这是我第一次使用SSL证书以及AWS,因此任何帮助都将不胜感激。

  • https-instance.config*:
packages:
  yum:
    mod_ssl: []

files:
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      1
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      2
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      3
      -----END CERTIFICATE-----

  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      1
      -----END RSA PRIVATE KEY-----

  "/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>
  • https-instance-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
ymzxtsji

ymzxtsji1#

要在部署后创建/修改任何文件或执行任何脚本,请执行以下操作(我已经回答了关于在部署here上修改nginx配置的类似问题)。您的apache配置也一样。
您需要在**/tmp中创建文件,然后使用脚本将它们mv到最终位置。
以下内容适用于
Amazon Linux 2环境**:
来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
脚本从**.platform**中的子文件夹执行,您必须将子文件夹放置在项目的根目录下,如下所示:

~/your-app/
|-- Procfile
|-- readme.md
|-- .ebextensions/
|   |-- 01_write_some_files.config        
`-- .platform/
    |-- hooks
        `-- postdeploy
            `-- 01_move_some_files.sh        # Executed post deployment

01_write_some_files.config

在**.ebextensions的根目录下创建.config文件。
1.在
/tmp**中创建文件:

files:
  /tmp/someFolder/server.crt:
     mode: "000644"
     owner: root
     group: root
     content: |
       # your file content

  /tmp/someFolder/server.key:
     mode: "000644"
     owner: root
     group: root
     content: |
       # your file content

  # Do the same for all your files

01_move_some_files.sh

在**.platform/hooks/postdeploy中创建一个小脚本,修改权限为755**。

#!/usr/bin/bash

# Move the files you created in /tmp into the desired directories. 
sudo mv /tmp/someFolder/server.crt /etc/pki/tls/certs/server.crt

# other bash commands
lvmkulzt

lvmkulzt2#

从AWS Linux 2开始,您可以直接使用bash(例如使用输出重定向)写入文件的位置受到严格限制。
Web服务器配置的预期解决方案是将文件放在.platform的子目录中,即Apache的.platform/httpd或Nginx的.platform/nginx
如果您需要写入其他文件,则有两种选择。首先,.ebextensions中的命令和container_commands仍然可以将文件写入/tmp,因此您可以将文件写入/tmp,然后将其移动到您想要的位置。
更好的解决方案是使用您自己调用的脚本编写它们。例如,将以下内容放入一个.ebextensions/FILENAME.config文件中:

container_commands:
    # ...
    03_write_files:
        command: |
            source $PYTHONPATH/activate
            python .ebextensions/write_files.py

然后,在.ebextensions/write_files.py中编写一个脚本来写入这些文件:

#!/bin/python3
with open("file/1/path", "w") as f:
    f.write("file contents")
with open("file/2/path", "w") as f:
    f.write("file contents")

**警告:**部署时如果在项目目录下生成文件,请务必小心。请参阅Elastic Beanstalk deleting generated files on config changes了解更多信息。

相关问题