CloudFront关联EC2(NGINX)访问域名遇SSL协议错误求助
核心误解澄清
你完全正确:SSL终止确实应该在CloudFront完成,后端EC2上的NGINX不需要处理SSL(无需监听443端口、配置证书)。问题出在CloudFront与后端EC2的通信配置不匹配上。
错误根源拆解
CloudFront后端通信协议冲突
CloudFront默认会尝试用HTTPS请求后端,但你的EC2上NGINX仅监听80端口(HTTP),且EC2的HTTPS连接超时(因为NGINX未开启443端口),导致CloudFront无法从后端获取内容,最终向用户抛出SSL相关错误(该错误由CloudFront返回,而非EC2)。DNS解析指向错误
若外部DNS将erp.example.com直接指向EC2公网IP而非CloudFront分发域名,用户访问时会直接请求EC2的HTTPS服务,但NGINX未配置443端口,同样会触发超时或SSL错误。
具体修复步骤
调整CloudFront原点协议策略
进入CloudFront分发的「原点」配置页面,将「原点协议策略」修改为**「仅HTTP」或「匹配查看器」**(查看器发HTTPS请求时,CloudFront用HTTP连接后端)。确保CloudFront用HTTP与后端EC2通信,适配NGINX仅监听80端口的配置。确认NGINX基础配置
确保NGINX正确监听80端口,示例配置如下:server { listen 80; server_name erp.example.com; location / { root /usr/share/nginx/html; # 替换为你的站点根目录 index index.html index.htm; } }重启NGINX生效:
sudo systemctl restart nginx验证EC2 HTTP访问可用性
直接通过EC2公网IP访问http://<EC2-公网IP>,确认能正常返回内容,排除NGINX自身运行异常。检查DNS解析指向
确认外部DNS的erp.example.com记录(A/CNAME)指向CloudFront分发域名(如d1234567890abc.cloudfront.net),而非EC2公网IP。
错误原因补充说明
ERR_SSL_VERSION_OR_CIPHER_MISMATCH是CloudFront在无法正常连接后端时返回的兜底错误,并非真的SSL版本或密码套件不兼容。调整CloudFront与后端的通信协议后,该错误即可消除。
内容的提问来源于stack exchange,提问作者Karim Fayed

