Nginx可正常监听HTTP但HTTPS无法访问,求助排查
排查步骤
1. 检查Cloudflare SSL/TLS模式
Cloudflare与源站的加密不匹配是常见诱因:
- 登录Cloudflare控制台,进入对应域名的「SSL/TLS」→「概述」页面
- 若当前为「严格」模式,临时切换为「灵活」模式测试:该模式下Cloudflare对外用HTTPS,对内以HTTP连接源站,若能正常访问,说明源站SSL配置存在问题
- 若需保持「严格」模式,必须确保源站SSL证书是受信任的有效证书(不能是自签证书,除非Cloudflare已添加自定义根证书),且证书包含完整的链式文件
2. 验证Nginx 443端口监听状态
请求未到达Nginx才会无日志输出,先确认Nginx是否正常监听443端口:
- 执行命令检查监听端口:
ss -tulpn | grep nginx - 输出需包含
0.0.0.0:443或:::443,否则说明Nginx未正确加载443端口配置 - 检查Nginx配置语法:
nginx -t - 若存在语法错误,修复后重载配置:
nginx -s reload
3. 检查防火墙/安全组规则
服务器或云服务商的安全组可能拦截了443端口流量:
- 检查服务器本地防火墙(以ufw为例):
确保存在ufw status443/tcp ALLOW规则,无规则则添加:ufw allow 443/tcp - 检查云服务商(阿里云、AWS等)的安全组配置,确认入站规则允许443端口的TCP流量
4. 确认Cloudflare代理状态与DNS设置
- 进入Cloudflare「DNS」页面,确认
api.xxxx.io的记录为橙色云朵(开启代理),灰色云朵表示流量不经过Cloudflare,直接访问源站 - 可临时关闭Cloudflare代理(切换为灰色云朵),直接用源站IP访问
https://[源站IP],若仍无法访问,说明问题出在源站Nginx或服务器配置
5. 检查Nginx SSL证书有效性与权限
- 确认证书文件路径正确:
/etc/nginx/ssl/public.crt和/etc/nginx/ssl/private.key确实存在 - 调整证书文件权限,确保Nginx进程用户(通常为
www-data或nginx)可读取:chown -R nginx:nginx /etc/nginx/ssl/ chmod 600 /etc/nginx/ssl/private.key chmod 644 /etc/nginx/ssl/public.crt - 本地测试证书有效性:
查看输出中是否有「Verify return code: 0 (ok)」,若出现错误,说明证书本身无效或缺少链式证书openssl s_client -connect localhost:443
内容的提问来源于stack exchange,提问作者Salih Burak Çoşkun
相关产品推荐
相关产品推荐

