AWS EC2配置Nginx反向代理HTTPS转HTTP至容器遇访问问题
问题排查与解决步骤
1. 修复软链接拼写错误
你创建软链接时把sites-enabled拼成了sites-enbled,导致Nginx无法加载自定义配置文件。执行以下命令修正:
# 删除错误的软链接 sudo rm /etc/nginx/sites-enbled/custom.conf # 创建正确的软链接 sudo ln -s /etc/nginx/sites-available/custom.conf /etc/nginx/sites-enabled/
2. 修正Server Name的域名后缀
配置文件中server_name缺少.com后缀,和实际访问的域名不匹配,Nginx无法匹配到对应的反向代理规则。修改custom.conf中的server_name:
server { listen 443 ssl; server_name backend.my_ec2instance.com; # 补充.com后缀 # ... 其他配置 } server { listen 443 ssl; server_name frontend.my_ec2instance.com; # 补充.com后缀 # ... 其他配置 }
3. 修正SSL证书路径与文件配置
你将证书放在/etc/nginx/ssl/目录,但配置中只写了文件名,Nginx会在默认路径查找,导致无法加载证书。同时注意Let's Encrypt的证书和私钥是两个独立文件(一般为fullchain.pem和privkey.pem),不要混用:
server { listen 443 ssl; server_name backend.my_ec2instance.com; # 证书绝对路径 ssl_certificate /etc/nginx/ssl/fullchain.pem; # 私钥绝对路径 ssl_certificate_key /etc/nginx/ssl/privkey.pem; # ... 其他配置 }
如果你确实将证书和私钥合并到了
letsencrypt.pem,请将路径改为/etc/nginx/ssl/letsencrypt.pem,但更建议分开存储证书和私钥。
4. 验证Nginx配置并重启服务
执行以下命令检查配置是否存在语法错误:
sudo nginx -t
如果输出test is successful,则重启Nginx生效配置:
sudo systemctl restart nginx
5. 额外排查项
- 域名解析验证:确认
backend.my_ec2instance.com和frontend.my_ec2instance.com已正确解析到EC2实例的公网IP。 - EC2安全组/网络ACL:再次确认安全组已允许443端口的入站流量,网络ACL也已放行443端口的双向流量。
- 反向代理头部优化(可选):为了让后端容器获取正确的客户端信息,可在
location /块中添加以下配置: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 $scheme;
内容的提问来源于stack exchange,提问作者DeLac
相关产品推荐
相关产品推荐

