给网站配置域名时,最容易乱的地方不是某一个按钮在哪里,而是几个概念混在一起:域名、DNS、服务器公网 IP、HTTPS 证书、Nginx 或 Apache。

更清晰的顺序是:

  • 先确认是否需要备案
  • 再配置 DNS 解析
  • 等解析生效后申请 SSL 证书
  • 把证书部署到实际提供网站的服务上
  • 最后检查安全组、端口和浏览器访问结果

先确认是否需要备案

如果网站服务器在中国大陆地域,比如北京、上海、杭州、深圳,一般需要先做 ICP 备案。否则即使域名解析到了服务器,网站也可能无法正常访问。

如果服务器在香港、新加坡、美国等非中国大陆地域,通常不需要备案。

所以第一步不是急着加 DNS,而是先看网站到底跑在哪个地域。

配置 DNS 解析

如果域名和服务器都在阿里云,常见入口是:

阿里云控制台 -> 云解析 DNS -> 域名解析 -> 找到你的域名 -> 解析设置 -> 添加记录

如果网站部署在 ECS 上,通常添加两条 A 记录,把域名指向 ECS 的公网 IP:

记录类型:A
主机记录:@
记录值:你的 ECS 公网 IP
用途:访问 example.com
记录类型:A
主机记录:www
记录值:你的 ECS 公网 IP
用途:访问 www.example.com

如果绑定的是 OSS、CDN、SLB 或其他平台服务,通常使用 CNAME:

记录类型:CNAME
主机记录:www
记录值:平台给你的 CNAME 地址

需要注意的是,同一个主机记录不要同时配置冲突记录。比如 www 已经有 A 记录,就不要再给 www 加 CNAME。要换方案时,先删除或暂停旧记录。

等解析生效

DNS 不是点完就一定马上全球生效,通常需要几分钟到几十分钟。

本地可以用这些命令检查:

ping example.com

或者:

nslookup example.com
nslookup www.example.com

看到返回的是 ECS 公网 IP,或者平台提供的 CNAME 地址,说明解析基本正常。

申请 SSL 证书

如果要支持 HTTPS,就要申请证书。阿里云里常见入口是:

阿里云控制台 -> 数字证书管理服务 / SSL 证书 -> SSL 证书管理

申请时要填域名。比如你希望这两个地址都支持 HTTPS:

example.com
www.example.com

那证书里就要覆盖这两个域名。只申请 example.com,通常不会自动覆盖 www.example.com。

也可以申请通配符证书:

*.example.com

不过通配符通常不覆盖根域名 example.com,根域名可能还要单独加。

域名验证一般有三种方式:

  • 自动 DNS 验证:域名和云解析 DNS 在同一个阿里云账号下时比较省事
  • 手动 DNS 验证:按系统给出的 TXT 或 CNAME 记录去 DNS 里添加
  • 文件验证:把指定文件放到网站指定路径

证书签发后,再进入部署环节。

ECS + Nginx 的部署方式

如果网站跑在 ECS 上,并且前面用 Nginx 做反向代理,通常下载 Nginx 类型证书,会拿到两个文件:

example.com.pem
example.com.key

可以上传到服务器,例如:

/etc/nginx/cert/example.com.pem
/etc/nginx/cert/example.com.key

Nginx 配置可以像这样:

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

return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name example.com www.example.com;

ssl_certificate /etc/nginx/cert/example.com.pem;
ssl_certificate_key /etc/nginx/cert/example.com.key;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```

如果网站是静态目录,不是反向代理,可以把 location 改成:

location / {
    root /var/www/html;
    index index.html index.htm;
}

改完以后先检查配置,再重载:

nginx -t
systemctl reload nginx

OSS、CDN 和 Apache 的差异

如果网站在 OSS 上,路径一般是:

OSS Bucket -> 传输管理 / 域名管理 -> 绑定自定义域名 -> 配置 HTTPS 证书

通常要先给域名添加 CNAME,指向 OSS 提供的域名,然后在 OSS 域名管理里选择或上传证书,最后开启 HTTPS。

如果前面有 CDN,路径一般是:

CDN 控制台 -> 域名管理 -> 目标加速域名 -> HTTPS 配置

CDN 场景下,证书配置在 CDN 上,用户到 CDN 节点这一段会变成 HTTPS。

如果用 Apache,思路和 Nginx 类似,只是证书要配置到 Apache 的 SSL 配置里,改完后重启 Apache。

别忘了安全组端口

ECS 上即使 Nginx 配好了,如果安全组没放行,外部也访问不到。

至少要检查入方向规则:

TCP 80  0.0.0.0/0
TCP 443 0.0.0.0/0

入口通常是:

ECS 控制台 -> 实例 -> 安全组 -> 入方向规则

如果只是测试 HTTP,可以先看 80;上 HTTPS 后一定要放行 443。

最后用浏览器验证

完整链路其实是这样的:

用户访问 www.example.com
DNS 查询这个域名对应哪个 IP
返回 ECS 的公网 IP
浏览器访问 ECS
Nginx 或其他 Web 服务返回网站页面

换成生活化一点的比喻:

域名 = 店名
DNS = 地图导航 / 通讯录
ECS = 真实店铺地址
证书 = HTTPS 身份证明
Nginx = 店门口的接待和转发

所以配置网站时,我会按这个顺序检查:

  • 域名是否备案完成
  • DNS 是否指向正确 IP 或 CNAME
  • 证书是否覆盖根域名和 www
  • Nginx 或平台服务是否部署了证书
  • 安全组是否放行 80 和 443
  • 浏览器访问是否显示 HTTPS 正常

按这个顺序排查,比在控制台里到处乱点要稳很多。