核心问题是生产环境服务监听地址仍为127.0.0.1,导致外部请求无法进入;必须改为0.0.0.0并配合安全组、防火墙及反向代理检查。

本地能通、生产连不上,核心问题不是代码写错了,而是环境配置没对齐。重点盯住网络路径、服务暴露方式、安全策略这三块。
检查服务是否真正在生产环境监听正确地址
本地开发时服务常绑定 localhost 或 127.0.0.1,这在生产服务器上会导致外部请求根本进不来。
- 登录生产服务器,执行 netstat -tuln | grep :端口号(如
netstat -tuln | grep :8080),确认监听的是0.0.0.0:端口或*:端口,而不是127.0.0.1:端口 - Spring Boot 项目需检查
application.yml是否设置了server.address: 0.0.0.0;Node.js 用app.listen(port, '0.0.0.0') - 若用 Docker,确认
-p映射正确,且容器内服务监听的是0.0.0.0,不是127.0.0.1
验证网络可达性与端口连通性
别只信 ping,要测真实端口。很多云服务器默认关闭 ICMP,但端口才是关键。
- 从本地机器执行 telnet 生产域名 端口 或 nc -zv 域名 端口,看能否建立 TCP 连接
- 如果不通,依次排查:云服务商安全组(阿里云/腾讯云控制台)、服务器本地防火墙(
ufw status或firewall-cmd --list-all)、Nginx/Apache 是否做了反向代理但未转发该端口 - 若使用域名访问,加一条
nslookup 域名,确保 DNS 解析到了正确的生产服务器 IP
比对关键环境变量和中间件配置
Session、Redis、数据库连接这些依赖项,在本地和生产常有差异,但错误日志里往往不直接报“连不上 Redis”,而是表现为验证码失效、登录失败等间接现象。
- 检查
NODE_ENV、REDIS_URL、DB_HOST等环境变量是否已正确注入生产环境(Docker 的env_file、K8s 的ConfigMap、PM2 的--env production) - 验证码类功能失败,大概率是 Session 存储不一致:本地用内存,生产必须用 Redis;确认 Redis 地址、密码、库号(
db参数)全部匹配 - HTTPS 场景下,检查 Cookie 的
secure和sameSite配置是否随NODE_ENV === 'production'动态切换
抓取真实请求头与响应状态
前端看到的“连接被拒绝”或“网络错误”,后端可能已有明确反馈,只是被浏览器拦截或前端没捕获。
- 在生产环境打开浏览器开发者工具 → Network 标签页,触发一次失败请求,看它的 Status 是
ERR_CONNECTION_REFUSED、502 Bad Gateway还是504 Gateway Timeout - 如果是
502/504,说明 Nginx 已收到请求但无法转给后端,重点查 Nginx error.log 和后端服务是否存活 - 右键失败请求 → Copy → Copy as cURL,粘贴到服务器命令行执行,可绕过浏览器限制,直看后端原始响应










