跳转至

keyval: Nginx 模块用于键值存储

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7, 8, 9 和 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-keyval
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-keyval

通过在 /etc/nginx/nginx.conf 顶部添加以下内容来启用该模块:

load_module modules/ngx_http_keyval_module.so;

本文档描述了 nginx-module-keyval v0.3.0,于 2024 年 3 月 31 日发布。


此 nginx 模块创建的变量值来自键值对。

此模块受到 nginx 原始 http_keyval_module 的强烈启发。

依赖

使用 Redis 存储。

Docker

$ docker build -t nginx-keyval .
$ : "app.conf: 创建 nginx 配置"
$ docker run -p 80:80 -v $PWD/app.conf:/etc/nginx/http.d/default.conf nginx-keyval

Github 包:ghcr.io/kjdev/nginx-keyval

配置:ngx_http_keyval_module

示例

http {
  keyval_zone zone=one:32k;
  keyval $arg_text $text zone=one;
  ...
  server {
    ...
    location / {
      return 200 $text;
    }
  }
}

指令

语法: keyval key $variable zone=name;
默认: -
上下文: http

创建一个新的 $variable,其值通过 key 在键值数据库中查找。

数据库存储在共享内存或 Redis 中,具体取决于 zone 参数的设置。

key 中,您可以使用变量和文本的组合或仅使用变量。

例如: - $remote_addr:$http_user_agent - '$remote_addr $http_user_agent $host "一段随机文本"'

语法: keyval_zone zone=name:size [timeout=time] [ttl=time];
默认: -
上下文: http

设置用于存储键值数据库的共享内存区域的 namesize

可选的 timeoutttl 参数设置键值对被移除的生存时间(默认值为 0 秒)。

语法: keyval_zone_redis zone=name [hostname=name] [port=number] [database=number] [connect_timeout=time] [ttl=time];
默认: -
上下文: http

使用 Redis 存储

设置用于存储键值数据库的 Redis 区域的 name

可选的 hostname 参数设置 Redis 主机名(默认值为 127.0.0.1)。

可选的 port 参数设置 Redis 端口(默认值为 6379)。

可选的 database 参数设置 Redis 数据库编号(默认值为 0)。

可选的 connect_timeout 参数设置 Redis 连接超时时间(默认值为 3 秒)。

可选的 ttl 参数设置键值对被移除的生存时间(默认值为 0 秒)。

配置:ngx_stream_keyval_module

示例

stream {
  keyval_zone zone=one:32k;
  keyval $ssl_server_name $name zone=one;

  server {
    listen 12345 ssl;
    proxy_pass $name;
    ssl_certificate /usr/share/nginx/conf/cert.pem;
    ssl_certificate_key /usr/share/nginx/conf/cert.key;
  }
}

指令

语法: keyval key $variable zone=name;
默认: -
上下文: http

创建一个新的 $variable,其值通过 key 在键值数据库中查找。

数据库存储在共享内存或 Redis 中,具体取决于 zone 参数的设置。

语法: keyval_zone zone=name:size [timeout=time] [ttl=time];
默认: -
上下文: http

设置用于存储键值数据库的共享内存区域的 namesize

可选的 timeoutttl 参数设置键值对被移除的生存时间(默认值为 0 秒)。

语法: keyval_zone_redis zone=name [hostname=name] [port=number] [database=number] [connect_timeout=time] [ttl=time];
默认: -
上下文: http

使用 Redis 存储

设置用于存储键值数据库的 Redis 区域的 name

可选的 hostname 参数设置 Redis 主机名(默认值为 127.0.0.1)。

可选的 port 参数设置 Redis 端口(默认值为 6379)。

可选的 database 参数设置 Redis 数据库编号(默认值为 0)。

可选的 connect_timeout 参数设置 Redis 连接超时时间(默认值为 3 秒)。

可选的 ttl 参数设置键值对被移除的生存时间(默认值为 0 秒)。

示例

GitHub

您可以在 nginx-module-keyval 的 GitHub 仓库 中找到此模块的其他配置提示和文档。