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
设置用于存储键值数据库的共享内存区域的 name 和 size。
可选的 timeout 或 ttl 参数设置键值对被移除的生存时间(默认值为 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
设置用于存储键值数据库的共享内存区域的 name 和 size。
可选的 timeout 或 ttl 参数设置键值对被移除的生存时间(默认值为 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 仓库 中找到此模块的其他配置提示和文档。