按照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
2条答案
按热度按时间ymzxtsji1#
要在部署后创建/修改任何文件或执行任何脚本,请执行以下操作(我已经回答了关于在部署here上修改nginx配置的类似问题)。您的apache配置也一样。
您需要在**/tmp中创建文件,然后使用脚本将它们mv到最终位置。
以下内容适用于Amazon Linux 2环境**:
来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
脚本从**.platform**中的子文件夹执行,您必须将子文件夹放置在项目的根目录下,如下所示:
01_write_some_files.config
在**.ebextensions的根目录下创建.config文件。
1.在/tmp**中创建文件:
01_move_some_files.sh
在**.platform/hooks/postdeploy中创建一个小脚本,修改权限为755**。
lvmkulzt2#
从AWS Linux 2开始,您可以直接使用bash(例如使用输出重定向)写入文件的位置受到严格限制。
Web服务器配置的预期解决方案是将文件放在
.platform
的子目录中,即Apache的.platform/httpd
或Nginx的.platform/nginx
。如果您需要写入其他文件,则有两种选择。首先,.ebextensions中的命令和container_commands仍然可以将文件写入/tmp,因此您可以将文件写入/tmp,然后将其移动到您想要的位置。
更好的解决方案是使用您自己调用的脚本编写它们。例如,将以下内容放入一个
.ebextensions/FILENAME.config
文件中:然后,在
.ebextensions/write_files.py
中编写一个脚本来写入这些文件:**警告:**部署时如果在项目目录下生成文件,请务必小心。请参阅Elastic Beanstalk deleting generated files on config changes了解更多信息。