如何在没有负载均衡器的情况下在 AWS Beanstalk 中自动生成 HTTPS/SSL 证书?

问题描述 投票:0回答:1

我在 AWS 上使用 Elastic Beanstalk 来托管带有 Amazon Linux 2 + Nginx 服务器的单租户应用程序。 有什么方法可以自动生成 HTTPS 证书而无需重复到负载均衡器?

amazon-web-services ssl-certificate amazon-elastic-beanstalk certbot amazon-linux-2
1个回答
1
投票

一种解决方案是基于您的 Elastic Beanstalk 映像创建一个 AWS Linux 2 + Nginx 映像,并预安装 Certbot(生成证书所需的应用程序)并将该映像部署到您的实例。 然后,每次启动或更新服务器(重新启动/新版本上传)时,都可以使用 .posthook 脚本调用 Certbot 来更新证书

第一步,您可以通过向导创建一个 AWS Beanstalk 环境:该实例将在您的 EC2 选项卡上可用。 然后,您可以通过 SSH 访问您的 EC2 实例(此链接 中有教程:Putty is a good choice of a SSH client on Windows)并运行以下命令来安装 Certbot:

sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/

sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm

sudo yum-config-manager --enable epel*

sudo yum install -y certbot python2-certbot-nginx 

之后,您可以转到 EC2 选项卡,找到您的实例并基于您的 EC2 Elastic Beanstalk 实例创建映像:

创建映像后,通过在 Elastic Beanstalk 配置选项卡上的实例流量和缩放菜单中插入新创建的 AMI,可以在多个实例上重复使用它。

下一步是为您的 EB 环境分配一个 DOMAIN 环境变量。此变量对应于已通过 DNS 分配给您的服务器 IP 的域。

最后,在Beanstalk上上传的.zip/.jar文件或docker镜像中要放一个脚本。该文件应位于:

-- .zip file root
   -- .platform
      -- hooks
         -- postdeploy
            -- update_certificate.sh

文件内容为:

#!/bin/bash
sleep 60
sudo certbot --nginx --non-interactive --redirect --email [email protected] --agree-tos -d $(sudo /opt/elasticbeanstalk/bin/get-config environment -k DOMAIN) --cert-name $(sudo /opt/elasticbeanstalk/bin/get-config environment -k DOMAIN) || echo 'The certificate could not be generated/updated. Initialization will continue'

--email 参数应该替换为真实的电子邮件,也可以设置为环境变量。

sleep 命令等待服务器 IP 对应弹性 IP :如果在此之前调用 Certbot,则不会生成证书。

另请注意,此命令指示 Nginx 将流量从端口 80 (HTTP) 重定向到 443 (HTTPS),因此应在您的 EC2 实例上启用此端口:

这个解决方案应该对应用程序服务器/Nginx 服务器重启和新应用程序版本的上传具有弹性。

© www.soinside.com 2019 - 2024. All rights reserved.