Nginx Lua 代码限制UA访问并返回444 状态码
以下是符合要求的 Nginx Lua 代码:
http {
# 其他配置
lua_shared_dict qyuc_dict 10m;
init_worker_by_lua_block {
local qyuc_dict = ngx.shared.qyuc_dict
qyuc_dict:set('qyuc', true)
}
server {
listen 80;
server_name example.com;
access_by_lua_block {
local qyuc_dict = ngx.shared.qyuc_dict
local ua = ngx.var.http_user_agent
if not ua or not qyuc_dict:get(ua) then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
location / {
return 444;
}
}
}
这段代码会在 Nginx 启动时初始化一个名为qyuc_dict的共享字典,并在每个 worker 进程中执行一次init_worker_by_lua_block代码块,将qyuc_dict中的qyuc键设置为true。
接着,在每个请求进来时,会执行access_by_lua_block代码块,获取请求头中的User-Agent,并检查qyuc_dict中是否存在该 UA 对应的键值,如果不存在或值为false,则返回HTTP_FORBIDDEN(403)状态码,否则继续执行后面的请求处理流程。
最后,当请求的 URI 匹配到/时,会返回HTTP_CLOSE(444)状态码,表示连接被关闭,这样就达到了拒绝非法 UA 访问的目的。
这段代码可以放在宝塔面板的网站设置->高级设置->Nginx->Nginx.conf文件中的http块内。
原文地址: https://www.cveoy.top/t/topic/nwCl 著作权归作者所有。请勿转载和采集!