服务器与网络 / 2026-07-22
从 DNS 到 HTTPS:在 Ubuntu 24.04 上部署一个可验证的 Nginx 站点
从完整访问链路出发,连接域名解析、IPv4/IPv6、Nginx、SSL 与外部验证;目标不只是“能打开”,而是知道每一层是否生效、失败时如何回退。
目标与访问链路
一次 HTTPS 访问至少会经过:域名解析、客户端网络、IPv4 或 IPv6 路由、防火墙、Nginx 监听、证书选择和站点文件。任何一层失败,浏览器看到的现象都可能只是“打不开”。
这篇笔记的目标是建立一个可验证的路径:每完成一层,就留下一个独立检查方法。不要同时修改 DNS、防火墙和 Nginx;一次只改变一个变量,才能知道结果来自哪里。
部署前检查
先记录当前状态,特别是已经在线的服务器。以下命令只用于读取信息:
ip -brief address
ss -lntp
nginx -T确认四件事:
- 域名控制权在自己手中;
- 服务器拥有可用的公网 IPv4、IPv6,或已经规划好反向代理入口;
- TCP 80 与 443 在主机防火墙、云安全组和上游路由中都可达;
- 现有 Nginx 配置已经备份,且知道如何恢复。
不要因为本机可以访问,就认为公网一定可达。验证时至少使用另一条网络,例如手机流量。
配置 DNS
为 IPv4 配置 A 记录,为 IPv6 配置 AAAA 记录。两者可以同时存在,但只有在 IPv6 链路真正可用时才发布 AAAA;错误的 AAAA 可能让部分客户端优先走向一条失败路径。
等待解析生效后,分别检查:
dig A yaang.cloud +short
dig AAAA yaang.cloud +shortDNS 只回答“域名指向哪里”,不会证明目标端口已经开放,也不会证明 Nginx 返回了正确站点。
建立最小 HTTP 站点
先准备独立目录,并让部署用户拥有文件、Nginx 只负责读取:
sudo install -d -m 0755 /var/www/yaang/current一个最小的 Nginx 站点可以从下面开始:
server {
listen 80;
listen [::]:80;
server_name yaang.cloud www.yaang.cloud;
root /var/www/yaang/current;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}启用配置前先测试语法:
sudo nginx -t
sudo systemctl reload nginxreload 会让 Nginx 重新读取配置;如果语法检查失败,不要强行重启。此时可在服务器本机使用带 Host 头的请求验证虚拟主机,而不必等待 DNS:
curl -I -H 'Host: yaang.cloud' http://127.0.0.1/部署证书与 HTTPS
证书应覆盖实际使用的主机名,并由自动化 ACME 客户端负责续期。证书与私钥路径由所选客户端决定,不要把私钥复制进网站目录或代码仓库。
HTTPS 站点的核心结构如下:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name yaang.cloud www.yaang.cloud;
root /var/www/yaang/current;
index index.html;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/private-key.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name yaang.cloud www.yaang.cloud;
return 308 https://$host$request_uri;
}完成后再次执行 nginx -t,通过后再 reload。证书续期任务还需要一次演练,确保更新证书后服务会安全地重新加载。
分层验证
不要只看浏览器图标。分别验证 IPv4、IPv6、响应头和证书:
curl -4 -I https://yaang.cloud/
curl -6 -I https://yaang.cloud/
openssl s_client -connect yaang.cloud:443 -servername yaang.cloud </dev/null再从外部网络检查:
- HTTP 是否按预期跳转到 HTTPS;
- 证书主机名、有效期和证书链是否正确;
- IPv4 与 IPv6 是否都返回同一个站点;
- 不存在的路径是否返回 404,而不是意外落到其他虚拟主机;
- Nginx access log 与 error log 是否出现异常。
常见断点
解析正确但连接超时:优先检查安全组、主机防火墙、上游端口映射和运营商入站限制。
IPv4 正常、IPv6 失败:检查 AAAA 记录、服务器 IPv6 地址、默认路由、防火墙规则以及 Nginx 的 [::]:443 监听。
返回了错误站点:检查 server_name、配置加载顺序与默认虚拟主机,不要只改网页文件。
证书不匹配:确认请求携带的主机名、证书 SAN,以及对应虚拟主机使用的证书路径。
回滚
上线前保留:旧站点目录、旧 Nginx 配置、证书路径和一份 nginx -T 输出。出现问题时,恢复上一份已验证配置,执行 nginx -t,通过后 reload;如果只是内容故障,可把 current 切回上一版静态目录。
最终标准不是“配置写完”,而是每条路径都有可重复的验证结果,并且知道如何回到修改前的状态。