这是我第一次使用 AWS 或任何其他此类平台。我的网站需要 https,因为我使用 stripe。我已经使用 AWS 证书管理器获得了 SSL 证书。但使用它的唯一方法是您的实例上有负载均衡器。我不想支付负载均衡器的费用,因为这样做的项目太小了。
还有其他方法可以在没有负载均衡器的情况下启用 HTTPS 吗?
最简单的方法是通过 CloudFront (CF):
为此,您将创建一个 CF 发行版并设置您的 SSL 证书和一个自定义域(必需),并将 EB 环境设置为自定义源。
替代方案是在 EB 实例上配置 nginx 以使用 SSL。为此,您还需要查看一些有关如何使用 nginx 来处理 https 请求的教程或文档。一些例子:
但据我记得,这不适用于 ACM 证书。这是这种方法的一个局限性。
Let's Encrypt 免费自动更新证书来安装在您的网络服务器上。
SSL 通信模式
步骤
配置 Cloudflare
在 AWS Systems Manager 中存储证书
/app/ssl/server-crt
/app/ssl/server-key
更新 AWS IAM 策略以从 AWS Systems Manager 读取
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "arn:aws:ssm:region:account_id:parameter/your-game-changer/ssl/server-crt"
},
{
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": "arn:aws:ssm:region:account_id:parameter/your-game-changer/ssl/server-key"
}
]
}
.ebextensions/01_https-instance-securitygroup.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
.ebextensions/02_https-instance.config
:的文件
files:
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN CERTIFICATE-----
certificate file contents
-----END CERTIFICATE-----
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
content: |
-----BEGIN RSA PRIVATE KEY-----
private key contents # See note below.
-----END RSA PRIVATE KEY-----
container_commands:
01_fetch_server_crt:
command: |
aws ssm get-parameter --name "/app/ssl/server-crt" --with-decryption --query "Parameter.Value" --output text > /etc/pki/tls/certs/server.crt
02_fetch_server_key:
command: |
aws ssm get-parameter --name "/app/ssl/server-key" --with-decryption --query "Parameter.Value" --output text > /etc/pki/tls/certs/server.key
.platform/nginx/conf.d/https.conf
:的文件
server {
listen 443 ssl;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
通过执行这些步骤,您将拥有安全的 HTTPS 设置,并将 Cloudflare 的代理和 SSL 证书集成到 AWS Elastic Beanstalk 中。