nginx+lua防采集
之前介绍了nginx+lua+redis实现验证码防采集,在此基础上我又增加了搜索引擎的域名反查,以排查伪造搜索引擎的爬虫。原理是查看根据useragent为搜索引擎的客户端,如:百度、搜狗、谷歌等;通过nslookup或其他工具反查其ip所对应的域名是否包含baidu、sogou等关键字,若包含则直接加入白名单;否则认为是伪造搜索引擎的。当然更严谨的是判断其一级域名的关键字是否为baidu或搜狗。实现
vim access.lua
--搜索引擎名称
crawl = {"Baiduspider", "Sogou"}
--搜索引擎关键词
keyword = {"baidu", "sogou"}
--搜索引擎爬虫判断
--先判断user_agent是否为空
if ngx.var.http_user_agent ~= nil then
for i = 1, 2 do
if string.find(ngx.var.http_user_agent, crawl[i]) ~= nil then
--反查搜索引擎域名
local handle = io.popen("nslookup " ..ngx.var.remote_addr)
local result = handle:read("*all")
handle:close()
--检查是否包含关键字
for j = 1, 2 do
if string.find(result, keyword[j]) ~= nil then
res , err = cache:set("bind_"..ngx.var.remote_addr , 0)
res , err = cache:set("white_"..ngx.var.remote_addr , 1)
goto label
end
end
end
end
end