这篇文章记录一次从“域名还没指向服务”到“网站可以通过 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 200 或 HTTP/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 不生效”这几类问题快速定位清楚。