网站运维工作里,域名访问提示不支持IP访问这类报错十分常见。用户看到浏览器访问失败,背后的诱因却横跨多个环节,域名解析、服务器配置,或是云服务商的安全策略,任意一处配置出错,都有可能返回相同提示。下面由外向内梳理各类常见故障场景和对应的处理办法。
域名没有完成ICP备案是最普遍,也容易被忽略的一类问题。国内服务器有硬性要求,域名解析指向大陆机房IP,必须完成ICP备案才可以正常访问。未备案域名访问时,会被云服务商拦截系统拦截,弹出未备案提示页面,有意思的是,直接用服务器IP访问网站却能正常打开。IP可访问、域名打不开,出现这种反差基本就是备案问题。唯一解决途径就是到服务器服务商提交备案申请,备案成功之前,IP访问或者切换香港、海外节点只能临时应急,云平台会周期性扫描,识别到未备案域名绑定后会触发封禁,一般24至72小时内就会生效。备案审核阶段,可以在服务器上设置默认站点,拒绝未绑定域名的访问请求,就算其他人把未备案域名解析到你的IP,也无法打开站点,避免服务器被连带处罚。

还有一类情况刚好相反,域名解析正常,但站点无法访问,根源在服务器Web服务配置。Nginx配置里如果设置listen 80 default_server默认站点,你的域名没有在server_name完成匹配,访问请求就会落到默认站点,返回空白页面、404或是默认欢迎页。需要在Nginx配置新增对应域名的server块,server_name填写完整域名,带www和不带www两种域名形态都要覆盖。修改完成执行nginx -t校验语法,确认无误后执行systemctl reload nginx重载服务。Apache的排查逻辑类似,检查VirtualHost模块的ServerName和ServerAlias是否完整配置。还有一种容易漏掉的场景,HTTP访问正常,但HTTPS访问报证书错误,大概率是443端口的server块缺少域名别名,造成SNI匹配失败,复制配置的时候一并加上www域名别名即可。
云平台安全组和服务器本地防火墙,是另外一层流量校验关卡。安全组属于云服务商提供的虚拟防火墙,默认往往只开放22端口用于远程管理,80、443端口需要手动放行。登录云服务器控制台找到安全组设置,添加入站规则,开放80和443端口,授权源填写0.0.0.0/0代表允许全部来源访问。服务器本地防火墙同样需要核查,CentOS的firewalld、Ubuntu的ufw,或是iptables规则,确认80、443端口放行。快速排查方式:服务器内部执行ss -tulpen | grep ':80',查看80端口是否处于监听状态,端口没有监听说明Web服务本身存在故障,和防火墙无关;端口正常监听但外部无法访问,再去排查安全组与防火墙。
部署CDN之后,排查链路会再多一层。开启CDN之后,用户访问请求到达CDN节点,再由节点回源站拉取页面内容。域名访问报错,但是直接访问源站IP正常,故障基本出在CDN回源相关配置。最常见的错误就是回源HOST填写错误。CDN控制台填写源站地址,可以是IP或者域名,同时附带回源HOST选项。源站填写IP,但回源HOST没有设置成源站绑定域名,源站收到请求无法识别请求归属站点,返回默认页面或者404。正确做法是回源HOST填写网站域名,和源站Nginx内的server_name保持一致。另外核查CDN的CNAME解析是否生效,ping域名查看返回IP是否匹配CDN控制台给出的CNAME地址,如果返回的还是源站IP,代表流量根本没有经过CDN,CDN没有启用。
域名解析本身故障的概率不算高,但一旦出问题排查起来比较绕。先用nslookup或者dig工具校验,域名解析出来的IP是否和服务器IP一致。解析结果不对,进入域名解析后台核对A记录值,检查是否被其他记录覆盖,或是TTL缓存还没有过期。解析生效需要等待时间,国内域名一般几分钟到数小时,修改之后不要反复刷新测试,等待一段时间再验证。解析结果正确,但本机浏览器打不开,切换手机4G热点测试,或是清空本地DNS缓存。Windows执行ipconfig /flushdns,Mac系统执行sudo dscacheutil -flushcache,清理缓存后重试。很多时候只是本地DNS缓存还保留旧IP地址。
推荐按照由外到内的顺序排查。第一步确认域名解析IP是否正确,接着检查安全组、服务器防火墙放行端口,然后核对Nginx或者Apache配置里域名匹配规则,再确认备案状态,最后再处理CDN、本地DNS缓存这类外围内容。很多故障根源不在远端环节,但很多人习惯从最远的地方着手修改,反复调试之后才发现仅仅是安全组没开放80端口,白白耗费时间。顺着由近到远的顺序排查,定位故障速度会更快。