CentOS7独立服务器DNS解析失败,PHP爬虫脚本运行报错求助
修复CentOS7服务器DNS解析失败问题
第一步:确认系统层面的DNS解析问题
先通过终端命令验证是不是整个服务器都无法解析域名,而非PHP脚本单独的问题:
- 执行
ping www.bbc.com,如果提示Name or service not known,说明系统DNS确实存在问题 - 执行
nslookup www.bbc.com或dig www.bbc.com,如果返回server can't find www.bbc.com: NXDOMAIN,进一步确认是DNS配置错误
第二步:临时修改DNS配置测试(无永久影响)
先临时替换为公共DNS服务器测试,重启后会恢复原有配置,不会破坏现有设置:
- 打开DNS配置文件:
vi /etc/resolv.conf - 删除原有无效的
nameserver行,添加两行公共DNS:nameserver 8.8.8.8 nameserver 1.1.1.1 - 保存退出(按
Esc,输入:wq回车) - 再次执行
ping www.bbc.com,如果能正常收到回复,说明问题出在DNS服务器配置,接下来做永久配置
第三步:永久配置DNS服务器
根据服务器网络管理方式选择对应操作:
方式一:使用NetworkManager(默认情况)
- 找到网卡配置文件,一般在
/etc/sysconfig/network-scripts/目录下,文件名类似ifcfg-eth0或ifcfg-enp0s3,用命令查看:ls /etc/sysconfig/network-scripts/ifcfg-* - 编辑该文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0 - 添加或修改以下内容:
DNS1=8.8.8.8 DNS2=1.1.1.1 PEERDNS=noPEERDNS=no是为了防止DHCP自动覆盖你的DNS设置 - 保存后重启网络服务:
systemctl restart network
方式二:禁用自动修改DNS(适合不用NetworkManager的情况)
如果直接修改resolv.conf后被系统自动覆盖,给文件加锁防止修改:
- 先按第二步修改好
/etc/resolv.conf的内容 - 执行命令:
chattr +i /etc/resolv.conf
这样系统就无法自动修改这个文件,配置永久生效
第四步:排查其他可能影响的因素
- 防火墙:临时关闭防火墙测试:
systemctl stop firewalld,如果能解析,就开放DNS端口:firewall-cmd --add-service=dns --permanent firewall-cmd --reload - SELinux:临时关闭测试:
setenforce 0,如果正常,再执行setenforce 1恢复,然后检查SELinux日志是否有相关限制(一般很少影响DNS解析)
验证PHP脚本是否恢复正常
修改完DNS后,重新运行你的爬虫脚本,或者创建一个简单的测试脚本:
<?php var_dump(gethostbyname('www.bbc.com')); ?>
如果输出是正确的IP地址,说明DNS问题已解决,你的爬虫脚本应该能正常运行了
内容的提问来源于stack exchange,提问作者Yogus
相关产品推荐
相关产品推荐

