辛辛苦苦把网站或应用部署到服务器,浏览器一打开却提示“无法访问”或者直接卡在加载界面。明明终端显示“部署成功”,怎么就是打不开?这种情况太常见了,其实问题往往出在几个关键环节。
检查服务器是否真的在运行
很多人以为执行完启动命令就万事大吉,其实服务可能根本没跑起来。比如你用 Node.js 部署了一个项目,运行 npm start 后看到一堆日志输出,但一关终端,服务就断了。这是因为进程被终止了。
正确做法是使用后台运行工具,比如 PM2:
pm2 start app.js --name "my-web-app"
然后用 pm2 list 看看服务是不是 running 状态。
防火墙和端口没开,外人进不来
你的服务可能已经在跑,监听 3000 或 8080 端口,但云服务器默认是封掉大部分端口的。比如阿里云、腾讯云都有安全组规则,必须手动放行你用的端口。
假设你服务跑在 3000 端口,就得去控制台添加一条规则:允许 TCP 协议,端口范围填 3000/3000。本地也得看看有没有防火墙拦着,Windows 防火墙或 Linux 的 ufw、firewalld 都要配置。
绑定地址写错了,只听了本地
代码里启动服务时,如果写的是 localhost 或 127.0.0.1,那只能本机访问。别人从外网根本连不上。
正确的做法是绑定 0.0.0.0,表示接受所有来源的连接。比如 Express 应用:
app.listen(3000, '0.0.0.0', () => {
console.log('Server is running on http://0.0.0.0:3000');
});
这样外部才能通过公网 IP + 端口访问到你。
域名解析和 Nginx 配置容易翻车
如果你用了域名,先确认 DNS 是否已经生效。ping 一下域名,看能不能解析到服务器 IP。有时候改了记录,缓存还没刷新,本地查不到最新结果。
用 Nginx 做反向代理也很常见。配错了路径或者端口,请求就会被丢掉。比如:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
少这一段,可能就拿不到真实 IP;proxy_pass 写错端口,页面直接 502。
浏览器提示不安全?可能是 HTTPS 没配好
现在浏览器对 HTTP 越来越不友好,有的干脆不让加载。如果你上了 HTTPS,但证书过期或域名不匹配,也会导致白屏或拦截。
Let's Encrypt 免费证书挺好用,但三个月要续一次。可以用 certbot 自动续签,别等到到期才想起来。
遇到“部署成功但访问不了”,别光盯着部署脚本看。从服务进程、端口、网络、绑定地址到代理层层排查,问题通常就藏在中间某一环。