以下是符合要求的 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块内。

Nginx Lua 代码限制UA访问并返回444 状态码

原文地址: https://www.cveoy.top/t/topic/nwCl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录