← 返回首页

反向代理与备案:国内服务器上域名为什么打不开

2026-10-26 · 技术笔记

域名解析到 IP 了,服务器上网站也能跑,但浏览器打开就是超时。这类问题通常不是程序的问题,而是三层关卡没过。

第一层:云厂商的安全组

很多人以为服务器上 ss -tlnp 看到端口在监听就完事了。实际上流量要先进云平台的安全组,安全组默认只放行少数端口。

阿里云 → ECS → 实例 → 安全组 → 入方向
协议:自定义 TCP
端口:80/80、443/443
授权对象:0.0.0.0/0

判断方法很简单:本地 curl 127.0.0.1 通、外网不通,就是安全组。

第二层:nginx 的 server_name

nginx 按 server_name 匹配请求的 Host 头。如果没有匹配到,就用 default_server 兜底。这带来一个副作用:任何指向这台机器的域名,都会打开你的默认站点。

想让未备案域名访问不到,可以把默认站点直接返回 404:

server {
    listen 80 default_server;
    server_name _;
    return 404;
}

第三层:备案

国内服务器上,域名必须先完成 ICP 备案(省通信管理局),通过后 30 天内还要做 公安联网备案(全国互联网安全管理服务平台)。

几个容易忽略的点:

顺手把 HTTPS 也做了

现在浏览器会主动尝试 HTTPS,只配 HTTP 的站在某些环境下会被判"连接异常"。用 Let's Encrypt 免费证书即可:

certbot --nginx -d example.com -d www.example.com

证书 90 天有效,certbot 会安装 systemd timer 自动续期。装完记得 certbot renew --dry-run 演练一次,别等真到期才发现续不上。

经验:域名打不开,永远按"安全组 → nginx → 备案/证书"这个顺序查,一层层排除。