Nginx 异常日志中提示“lua udp socket read timed out”及解决方法

不久前朋友向笔者反馈,说他公司网站所在的服务器,其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”的相关日志。

Nginx 异常日志中提示“lua udp socket read timed out”及解决方法-工作应用
图片由AI生成,仅供娱乐
本文来自「IT人的工作生活 —— 分享IT技术实战经验,欢迎访问首页获取更多内容。如需转载本站的文章,请先通过电子邮件的方式联系站长,站长确认后方可转载,并需要注明出处。

为您推荐