You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在nginx.conf中使用ngx_http_keyval_module的keyval?是否需导入模块?

使用ngx_http_keyval_module实现IP黑名单的完整指南

我来帮你一步步搞定这个配置,先从模块的安装确认说起,再到具体的配置写法:

一、先确认模块是否需要额外安装

ngx_http_keyval_module并不是Nginx默认编译的核心模块,所以你得先检查它有没有在你的Nginx里启用:

  • 跑一下命令 nginx -V,看看输出的编译参数里有没有 --with-http_keyval_module。如果有,那直接用就行;如果没有,你有两个选择:
    • 重新编译Nginx,编译时加上 --with-http_keyval_module 参数;
    • 如果你用的是Debian/Ubuntu这类发行版,可以直接装 nginx-extras 包,这个包默认包含了这个模块。

二、配置keyval指令实现IP黑名单

结合你给出的配置片段,我调整成适合IP黑名单的写法,注释里会讲清楚每个部分的作用:

http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    # 定义一个名为ip_blacklist的内存区域,分配1MB空间(足够存几千条IP)
    # state参数指定的文件用来持久化规则,重启Nginx也不会丢
    keyval_zone zone=ip_blacklist:1m state=/var/lib/nginx/ip_blacklist.keyval;
    # 将客户端IP($remote_addr)作为查询key,匹配到的结果存在$is_blacklisted变量里
    keyval $remote_addr $is_blacklisted zone=ip_blacklist;

    server {
        listen 8080;
        server_name localhost;

        # 拦截逻辑:如果匹配到的value是"block",直接返回403禁止访问
        if ($is_blacklisted = "block") {
            return 403;
        }

        # 你的其他业务配置
        location / {
            root html;
            index index.html index.htm;
        }
    }
}

三、如何管理黑名单规则

因为我们加了state参数,你可以直接编辑指定的ip_blacklist.keyval文件来添加或删除黑名单IP,格式是每行一个键值对:

192.168.1.100 block
10.0.0.5 block
# 注释用#开头,不会生效

修改完文件后,不用重启Nginx,只需要执行 nginx -s reload 就能让新规则立刻生效。

一些额外的小提示

  • 如果不需要规则持久化,把state=/var/lib/nginx/ip_blacklist.keyval这部分删掉就行,不过重启Nginx后规则会清空;
  • keyval_zone后面的1m是内存大小,要是你的黑名单IP特别多,可以调大一点,比如10m;
  • Nginx的if指令在server块里尽量只做简单的相等判断,复杂逻辑容易出问题,这里的场景完全没问题。

内容的提问来源于stack exchange,提问作者sunder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:16