我知道这篇文章已经有一年了,但我最近遇到了类似的问题,希望有人会觉得这篇文章有用。
我看到您正在使用负载平衡器。您必须执行以下操作:
步骤 1
确保您的 EC2 实例上的端口 443 已打开且未被防火墙阻止。你可以运行
sudo netstat -tlnp
在 linux 上检查哪些端口是打开的。输出应如下所示:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 937/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1060/mysqld
tcp6 0 0 :::22 :::* LISTEN 937/sshd
tcp6 0 0 :::443 :::* LISTEN 2798/apache2
tcp6 0 0 :::80 :::* LISTEN 2798/apache2
第二步
确保您的安全组设置如下:
EC2(入站)
- HTTP TCP 80 负载平衡器
- HTTPS TCP 443 负载均衡器
负载均衡器(出站)
- HTTP TCP 80 EC2 实例
- HTTPS TCP 443 EC2 实例
第三步
确保您的 EC2 实例正在侦听端口 443 (/etc/apache2/ports.conf):
Listen 80
Listen 443
如果您使用的是虚拟主机,请确保它看起来像这样:
<VirtualHost *:80>
DocumentRoot /var/www/html/mysite.com
ServerName mysite.com
ServerAlias www.mysite.com
<Directory /var/www/html/mysite.com>
AllowOverride All
RewriteEngine On
Require all granted
Options -Indexes +FollowSymLinks
</Directory>
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/html/mysite.com
ServerName mysite.com
ServerAlias www.mysite.com
SSLEngine on
SSLCertificateFile /usr/local/ssl/public.crt
SSLCertificateKeyFile /usr/local/ssl/private/private.key
SSLCACertificateFile /usr/local/ssl/intermediate.crt
</VirtualHost>
第四步
使用以下命令以 .pem 格式上传您的证书文件:
aws iam upload-server-certificate --server-certificate-name my-server-cert
--certificate-body file://my-certificate.pem --private-key file://my-private-key.pem
--certificate-chain file://my-certificate-chain.pem
第四步
在附加了 EC2 实例的负载均衡器上创建一个侦听器。侦听器用于 HTTPS 和端口 443。侦听器将要求提供证书,并且它会列出您从 aws cli 添加的证书。如果未列出,请退出 AWS 控制台并重新登录。
之后,通过 HTTPS 的流量将开始流向您的 EC2 实例。
我有类似的问题,并在这里发布了我的问题和答案:HTTPS only works on localhost