不久前朋友向笔者反馈,说他公司网站所在的服务器,其Nginx异常日志经常出现类似于下面这样的错误日志记录:
2026/08/11 16:14:47 [error] 125867#0: *142982 lua udp socket read timed out, client: 223.109.252.248, server: www.12345.com, request: "GET /123.html HTTP/2.0", host: "www.12345.com"关键是,当中有不少的日志记录显示访问者是某些搜索引擎的爬虫,他爬这些错误影响到爬虫对他公司网站的访问。
这里先不讨论这种错误是否会对搜索引擎产生影响,一般情况下,Nginx 异常日志中有“lua udp socket read timed out”这样的记录,基本都说明这个服务器部署了一个基于Nginx lua的防火墙。实际上朋友公司那边确实通过宝塔面板部署了一个Nginx免费防火墙,造成出现这种问题的原因,是 Nginx 免费防火墙中的针对搜索引擎爬虫的某个函数,在对搜索引擎蜘蛛进行DNS反向验证时,UDP 查询超时。既然是跟DNS有关系,那可以采用以下的方法进行处理(假设服务器是 Ubuntu Server):
第一种方法:
修改 /etc/resolv.conf 文件,修改成以下的内容:
nameserver 223.5.5.5
nameserver 114.114.114.114
options timeout:5 attempts:3如果无法修改文件,但确认文件权限没有问题的,那大概率是文件被设置了 i (不可变)属性了,类似于 Windows 文件的“只读”属性,在修改之前,可以执行“sudo chattr -i /etc/resolv.conf”移除不可变属性,在完成修改并且保存之后,再执行“sudo chattr +i /etc/resolv.conf”重新加上不可变属性。
笔者先在朋友公司服务器上执行了这个操作,观察了一段时间,问题依旧出现;
第二种方法:
配置 Ubuntu Server 的 systemd-resolved:
nano /etc/systemd/resolved.conf
把 [Resolve] 下面的相关内容更改为如下内容(如果没有就添加,并且如果[Resolve]是注释状态的就取消注释):
DNS=223.5.5.5 114.114.114.114
DNSTimeoutSec=5输入完毕后保存退出,然后执行“sudo systemctl restart systemd-resolved”,重启服务并重新生成 resolv.conf。
不过,笔者在朋友服务器也用了这个方法,依旧不起作用。
第三种方法:
修改 Nginx 免费防火墙安装目录内的 init.lua 文件,找到 function host_pachong(ip,id,ua_key) 函数的相关代码,把函数的相关代码改为如下:
function host_pachong(ip,id,ua_key)
-- 直接返回 2,视为已验证蜘蛛,跳过 DNS 反向验证
return 2
end修改完毕后保存退出,随后执行 sudo systemctl restart nginx 重启 Nginx 服务。
笔者用了这个方法之后,朋友服务器的 Nginx 异常日志中,不再出现“ lua udp socket read timed out”的相关日志。









