从域名解析到 HTTPS 配置:一次完整的上线记录

_

这篇文章记录一次从“域名还没指向服务”到“网站可以通过 HTTPS 正常访问”的完整过程。目标是:把域名解析到服务器,让 Web 服务接住请求,再申请并配置 TLS 证书,最后用浏览器或命令行确认 HTTPS 生效。

背景和目标

域名和 HTTPS 看起来是两件事:一个负责“找到服务器”,一个负责“加密访问”。实际配置时,它们必须串起来:

  • DNS 解析:让域名指向服务器公网 IP。

  • 反向代理:让 Nginx、Caddy 或网关把域名请求转发到实际应用。

  • 证书签发:使用 Let’s Encrypt 等 CA 颁发证书。

  • HTTPS 启用:监听 443 端口,并把 HTTP 自动跳转到 HTTPS。

第一步:确认服务器 IP 和开放端口

配置域名前,先确认服务器有公网 IP,并且 80 和 443 端口可以从外部访问。80 端口通常用于证书签发的 HTTP-01 验证,443 端口用于 HTTPS。

curl -I http://服务器IP
sudo ss -lntp | grep -E ':80|:443'

如果云厂商有安全组、防火墙,也要放行 TCP 80/443。很多“证书申请失败”的问题,其实不是证书工具的问题,而是 80 端口根本没有通。

第二步:添加 DNS 解析记录

进入域名服务商的 DNS 控制台,添加 A 记录:

  • 主机记录:@ 表示根域名,例如 example.com

  • 主机记录:www 表示 www.example.com

  • 记录类型:A。

  • 记录值:服务器公网 IPv4。

如果服务器使用 IPv6,则添加 AAAA 记录。保存后等待 DNS 生效。可以用下面的命令检查:

dig example.com +short
nslookup example.com

只要返回的是预期的服务器 IP,就说明解析方向正确。不同地区 DNS 缓存可能有延迟,TTL 越长,等待时间可能越久。

第三步:配置 Web 服务或反向代理

域名解析到服务器后,还需要让服务器上的 Web 服务知道这个域名应该交给哪个应用处理。以 Nginx 为例,可以先配置 HTTP 站点:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:8090;
        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;
    }
}

保存后测试并重载:

sudo nginx -t
sudo systemctl reload nginx

这一步的目标是先让 http://example.com 能访问到应用。HTTP 通了之后,再处理 HTTPS 会更稳。

第四步:申请 HTTPS 证书

常见做法是使用 Certbot 申请 Let’s Encrypt 证书:

sudo apt update
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会读取 Nginx 配置,完成域名验证,并自动写入 443 证书配置。过程中如果提示是否重定向 HTTP 到 HTTPS,通常建议选择自动重定向。

如果你使用 Caddy,流程更简单:Caddy 会根据域名自动申请和续期证书,只要 DNS 已经指向服务器、80/443 端口开放即可。

第五步:验证 HTTPS 是否正常

证书申请完成后,检查 HTTPS 响应头:

curl -I https://example.com

正常情况下会看到 HTTP/2 200HTTP/1.1 200,证书链也可以用 OpenSSL 查看:

openssl s_client -connect example.com:443 -servername example.com </dev/null

浏览器地址栏显示小锁,且没有“不安全”提示,就说明证书和域名匹配正常。

第六步:确认证书自动续期

Let’s Encrypt 证书有效期通常是 90 天,所以续期非常重要。Certbot 安装后一般会自动创建 systemd timer,可以这样检查:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run

--dry-run 成功,基本就可以放心。之后证书会在到期前自动续期。

常见问题

  • DNS 没生效:检查 A 记录是否填错,是否解析到了旧 IP,必要时等待 TTL 过期。

  • 证书申请失败:优先检查 80 端口是否开放,Nginx 配置里的 server_name 是否包含目标域名。

  • HTTPS 打开是别的网站:通常是反向代理虚拟主机没匹配到域名,或默认站点抢占了请求。

  • 应用里生成的链接仍是 HTTP:需要把反向代理头 X-Forwarded-Proto 传给后端,并在应用里配置站点 URL 为 HTTPS。

总结

域名解析和 HTTPS 配置的关键顺序是:先确认服务器和端口,再添加 DNS 记录,然后配置反向代理,最后申请证书并验证自动续期。不要一上来就盯着证书报错看,很多 HTTPS 问题的根源其实在 DNS、端口或反向代理。

按这个顺序排查,基本可以把“域名打不开”“证书申请失败”“HTTPS 不生效”这几类问题快速定位清楚。

Halo 部署过程记录:从服务器准备到站点上线 2026-05-19

评论区