把一个域名成功绑定到服务器上,其实包含两个方向的动作:一是让域名指向服务器的IP地址,也就是常说的DNS解析;二是让服务器上的Web服务识别并响应这个域名的请求,也就是虚拟主机配置。很多人只做了第一步就以为大功告成,结果访问域名时服务器返回默认页面甚至直接拒绝连接。这篇文章会把两个环节完整讲清楚,并给出可直接套用的配置示例。

一、先搞懂域名解析的基本原理
当用户在浏览器输入一个域名时,操作系统会先向DNS服务器查询这个域名对应的IP地址,拿到IP之后才会向服务器发起HTTP请求。所以域名绑定的第一步,就是在域名服务商的控制台里添加解析记录,告诉DNS系统这个域名对应哪台服务器。
常见的解析记录有几种,各自用途不同。A记录把域名直接指向一个IPv4地址,例如把 www.ipipp.com 指向 123.45.67.89,这是绑定云服务器最常用的方式。CNAME记录把域名指向另一个域名,适合接CDN或者对象存储的场景。AAAA记录用于IPv6地址。如果你的服务器IP会经常变化,也可以考虑使用动态DNS方案。
添加A记录时需要注意主机记录的填法:填 www 表示只解析 www 子域名,填 @ 表示解析主域名本身,填 * 则是泛解析,任何子域名都会生效。如果希望主域名和 www 都能访问,通常需要添加两条记录,分别填 @ 和 www。
二、在域名服务商处添加解析记录
以国内常见的域名控制台为例,登录后进入域名管理页面,找到解析设置,点击添加记录。记录类型选A,主机记录填 @,记录值填你服务器的公网IP,TTL保持默认的600秒即可。然后再添加一条主机记录为 www 的记录,同样指向服务器IP。
保存之后,解析并不会立刻全球生效。DNS记录需要经过一段时间传播,这个过程叫TTL缓存生效期,国内一般在几分钟到一小时之间。如果你修改的是已经存在的记录,旧记录可能被各级DNS缓存,最长要等之前的TTL时间过期后才会刷新。所以建议在需要频繁调试时,提前把TTL调小到60秒,稳定后再调回去。
验证解析是否生效,最直接的办法是用命令行工具查询:
ping www.ipipp.com nslookup www.ipipp.com # Linux 或 Mac 下也可以用 dig dig www.ipipp.com +short
如果返回的IP地址和你填的记录值一致,说明解析已经生效。如果查询结果还是旧的IP或者提示无法解析,多半是缓存问题或者记录填错了,可以先检查主机记录有没有多打空格,或者换个本地DNS再试。
三、在服务器上配置Web服务接收域名请求
解析生效只是第一步,接下来要让服务器上的Web程序知道该响应哪个域名。以Nginx为例,需要配置server块,关键参数是server_name,它决定了Nginx用什么域名匹配这个虚拟主机。
server {
listen 80;
server_name www.ipipp.com ipipp.com;
location / {
root /var/www/html;
index index.html index.php;
}
}配置写好后执行 nginx -t 检查语法,没有报错再执行 nginx -s reload 重新加载配置。如果用的是宝塔面板之类的工具,在网站管理里添加站点时直接填写域名即可,面板会自动生成类似的配置,对新手更友好。
用Apache的话则需要在虚拟主机里配置ServerName:
<VirtualHost *:80>
ServerName www.ipipp.com
ServerAlias ipipp.com
DocumentRoot /var/www/html
DirectoryIndex index.html index.php
</VirtualHost>这里有一个非常常见的坑:如果服务器上同时运行了多个网站,Nginx和Apache都会把请求交给第一个匹配不到server_name的默认站点。所以务必确认你的server_name拼写和实际访问的域名完全一致,包括有没有带www,这两个在服务器眼里是两个不同的域名。
四、别忘了安全组和端口放行
解析生效、Web服务也配置好了,如果还是访问不了,八成问题出在网络层。云服务器的安全组默认可能只开放了SSH的22端口,需要手动放行80和443端口。以阿里云、腾讯云为例,在控制台的安全组规则里添加入方向规则,协议选TCP,端口范围分别填80和443,授权对象填0.0.0.0/0。
如果服务器本身还开启了系统防火墙,比如CentOS的firewalld或者Ubuntu的ufw,同样需要放行:
# firewalld firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload # ufw ufw allow 80/tcp ufw allow 443/tcp
可以在服务器本机执行 curl http://127.0.0.1 测试Web服务是否正常,如果本机正常而外网访问不了,那基本可以锁定是安全组或防火墙的问题。反之如果本机都打不开,就要检查Web服务有没有启动、端口有没有被占用。
五、配置HTTPS证书
现在的浏览器对没有HTTPS的站点越来越不友好,域名绑定好之后建议尽快上证书。免费方案可以使用Let's Encrypt,配合certbot工具可以自动完成申请和续期:
yum install -y certbot python3-certbot-nginx certbot --nginx -d ipipp.com -d www.ipipp.com # 申请成功后自动修改nginx配置,证书默认续期命令 certbot renew --dry-run
证书默认有效期90天,certbot安装时会自动创建定时任务续期,不用太操心。需要注意申请证书之前必须保证域名解析已经生效,并且80端口可以从公网访问,否则验证会失败。
常见问题与排查思路
域名解析不生效:先确认记录值是否填的公网IP而不是内网IP,云服务器控制台里看到的192.168或10开头的地址是内网地址,外网根本访问不到。其次检查域名本身的状态,未实名认证或被暂停解析的域名添加记录是无效的。
访问域名返回别的网站:说明请求到达了服务器,但匹配到了默认虚拟主机。检查server_name配置,确保域名拼写一致,修改后记得reload服务。
带www能访问,不带www不能访问(或相反):通常是解析记录或server_name里少配了一边,把 @ 和 www 两个都补齐即可,也可以在Web服务里配置301跳转,把不带www的请求统一跳到带www,对SEO更友好。
https访问提示证书不匹配:申请证书时没有把两个域名都包含进去,重新申请并加上 -d 参数把主域名和www域名都覆盖住。
整个流程总结下来就是:添加解析记录、等待生效、配置虚拟主机、放行端口、上HTTPS证书。每一步都可以单独验证,出现问题时沿着这条链路从前往后排查,定位起来并不困难。动手前把域名实名和备案问题提前处理好(国内服务器必须备案才能绑定域名使用80端口),能省掉后面大量的反复操作。