nginx代理后ip可以访问,但是域名不能访问的问题定位和排查情况
·
你当前的问题是:
浏览器可以通过
http://8.130.70.131:8089/api/banner/getIndexBanner访问接口,但无法通过https://zhongyuele.top/api/banner/getIndexBanner访问。
结合你提供的 nginx.conf 配置文件内容,以下是可能原因 + 解决方案的完整分析。

🔍 问题定位
✅ nginx 已配置 SSL 域名代理
你在配置中已正确添加了如下 server 块:
server {
listen 443 ssl;
server_name zhongyuele.top www.zhongyuele.top;
ssl_certificate /usr/local/app_zp/shop/shop-api/ssl/zhongyuele.top_public.crt;
ssl_certificate_key /usr/local/app_zp/shop/shop-api/ssl/zhongyuele.top.key;
location / {
proxy_pass http://127.0.0.1:8089;
...
}
}
理论上应能通过 https://zhongyuele.top 正常访问后端接口。
❌ 可能导致失败的原因及排查建议
✅ 1. Nginx 没有监听 443 端口
-
现象:
systemctl status nginx中没有报错;- 但浏览器无法访问 HTTPS 地址。
-
检查方式:
netstat -tulnp | grep :443 -
解决方法:
- 如果没有 nginx 占用 443,说明配置未生效,请执行:
nginx -t systemctl reload nginx
- 如果没有 nginx 占用 443,说明配置未生效,请执行:
✅ 2. 阿里云安全组未开放 443 端口
- 现象:
- nginx 启动正常;
- 本地测试(curl/wget)可以访问;
- 外网浏览器无法访问。
- 解决方法:
登录阿里云控制台 → 找到你的 ECS 实例 → 安全组规则 → 添加入方向规则允许 TCP 443 端口。
✅ 3. 域名未正确解析到服务器公网 IP
- 现象:
- 浏览器提示
ERR_CONNECTION_TIMED_OUT或ERR_NAME_NOT_RESOLVED
- 浏览器提示
- 解决方法:
- 登录域名管理后台(如阿里云、腾讯云等);
- 添加 A 记录指向你的服务器公网 IP(例如
8.130.70.131); - 使用
ping zhongyuele.top或nslookup zhongyuele.top检查是否解析成功。
✅ 4. 证书路径错误或权限不足
- 现象:
- nginx 启动失败或 HTTPS 页面显示“连接不安全”;
- 日志
/var/log/nginx/error.log中提示证书加载失败。
- 解决方法:
-
确认证书路径是否正确:
ls -l /usr/local/app_zp/shop/shop-api/ssl/ -
确保 nginx 用户有读取权限:
chmod 644 /usr/local/app_zp/shop/shop-api/ssl/*.crt chmod 600 /usr/local/app_zp/shop/shop-api/ssl/*.key chown nginx:nginx /usr/local/app_zp/shop/shop-api/ssl/*
-
✅ 5. 浏览器缓存或 HSTS 设置影响
- 现象:
- 曾经访问过该域名并设置了 HSTS;
- 更换证书或配置后仍无法访问。
- 解决方法:
- 清除浏览器缓存;
- 在 Chrome 地址栏输入:
chrome://net-internals/#hsts; - 删除
zhongyuele.top的 HSTS 设置。
✅ 6. proxy_pass 设置不当
-
当前配置:
proxy_pass http://127.0.0.1:8089; -
注意点:
- 确保应用服务确实在本机运行在
8089端口; - 可以使用以下命令验证本地访问:
curl https://localhost/api/banner/getIndexBanner
- 确保应用服务确实在本机运行在
✅ 推荐排查顺序
| 步骤 | 操作 | 目的 |
|---|---|---|
| 1 | ping zhongyuele.top | 确认域名解析是否正确 |
| 2 | curl -k https://zhongyuele.top/api/banner/getIndexBanner | 忽略证书验证测试访问 |
| 3 | nginx -t && systemctl reload nginx | 检查配置并重载服务 |
| 4 | netstat -tulnp | grep :443 | 查看 nginx 是否监听 443 |
| 5 | 阿里云控制台 | 检查安全组是否放行 443 |
| 6 | /var/log/nginx/error.log | 查看是否有证书加载失败等错误 |
✅ 示例:完整的 HTTPS Server Block(供参考)
server {
listen 443 ssl;
server_name zhongyuele.top www.zhongyuele.top;
ssl_certificate /usr/local/app_zp/shop/shop-api/ssl/zhongyuele.top_public.crt;
ssl_certificate_key /usr/local/app_zp/shop/shop-api/ssl/zhongyuele.top.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8089;
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;
}
}
✅ 补充建议:强制 HTTP 跳转 HTTPS(可选)
如果你希望所有请求都走 HTTPS,可在 HTTP server 块中添加跳转:
server {
listen 80;
server_name zhongyuele.top www.zhongyuele.top;
return 301 https://$host$request_uri;
}
🧪 最终建议操作流程
- 确认域名解析是否正确;
- 检查阿里云安全组是否开放 443;
- 检查 nginx 是否监听 443;
- 检查证书路径和权限;
- 使用
curl -k测试访问; - 使用浏览器清除缓存或尝试隐身模式;
- 查看日志
/var/log/nginx/error.log。
如仍有问题,请提供以下信息以便进一步诊断:
nginx -t输出结果;curl -k https://zhongyuele.top/api/banner/getIndexBanner返回的内容;/var/log/nginx/error.log中相关日志片段;- 域名解析截图或
dig zhongyuele.top输出。
更多推荐
所有评论(0)