← 返回技术手记

从域名解析到 HTTPS:理解网站上线的完整链路

网站上线并不是把域名指向服务器就结束了。DNS、端口、虚拟主机与证书分别处理不同的问题,按层检查更容易找到故障位置。

一、DNS 负责找到服务器

A 记录把域名指向 IPv4 地址,AAAA 记录对应 IPv6 地址。根域名和 www 子域名是两条不同的名称,配置其中一条,并不会自动为另一条建立解析。

修改记录后,可以用下面的命令查看查询结果。不同递归解析器存在缓存,因此本机看到的结果不一定立刻与其他网络一致。

dig +short A www.example.com
dig +short AAAA www.example.com

如果配置了 AAAA 记录,就要同时保证服务器 IPv6 的监听、路由和防火墙可用。否则部分访问者可能优先连接到无法使用的 IPv6 地址。

二、Nginx 负责选择网站

一台服务器可以托管多个网站。Nginx 根据请求中的主机名匹配对应的 server 块,再通过 root 和 location 决定返回哪些文件。域名解析正确但返回默认页或 404,通常需要检查 server_name 和网站目录。

server {
    listen 80;
    server_name www.example.com;
    root /var/www/example;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

配置调整后,先执行 sudo nginx -t 检查语法,再执行 sudo systemctl reload nginx 平滑加载。备份文件应放在不会被 include 加载的目录,避免同一个域名出现重复配置。

三、证书必须覆盖访问的域名

HTTPS 不只是开放 443 端口。证书的域名列表必须包含用户实际访问的名称。为 example.com 签发的普通单域名证书,不会自动覆盖 www.example.com。

采用 ACME 客户端申请证书时,HTTP-01 验证通常需要让域名正确解析,并允许公网访问 80 端口下的验证路径。签发完成后,再将普通 HTTP 请求跳转到 HTTPS。

四、自动续期需要完整闭环

证书续期依赖定时任务、验证条件和服务重载。可以检查 Certbot 的定时器,并通过模拟续期验证流程:

systemctl status certbot.timer
sudo certbot renew --cert-name www.example.com --dry-run

使用 webroot 模式时,验证目录需要长期保留,成功续期后还应让 Nginx 重载证书。仅检查磁盘上的证书时间不够,还要确认线上实际提供的新证书已生效。

五、从外部访问完成最后检查

示例使用 example.com 占位。实际部署前,应替换域名和目录,并根据服务环境调整配置。

← 查看其他技术总结