需编译集成redis2-nginx-module及其依赖ngx_devel_kit、set-misc-nginx-module,配置upstream与location使用redis2_query和redis2_pass直连redis,确保redis服务可访问且响应为原生协议格式。

要让 Nginx 通过 redis2-nginx-module 直连 Redis(即不走代理、不依赖 Lua,而是由 Nginx 原生发起 Redis 协议请求),需完成三步:编译集成模块、配置 upstream 和 location、确保 Redis 服务可访问。整个过程不涉及 Stream 模块或 TLS 加密转发,属于 HTTP 层的非阻塞直连。
确认依赖模块已就位
redis2-nginx-module 本身依赖两个前置模块:
- ngx_devel_kit(NDK):提供底层开发支持,必须先加载
-
set-misc-nginx-module:用于 URI 解码、变量赋值等,如
set_unescape_uri指令
三个模块需按顺序加入 configure 参数,路径必须准确,例如:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
--add-module=/path/to/ngx_devel_kit \
--add-module=/path/to/set-misc-nginx-module \
--add-module=/path/to/redis2-nginx-module
配置 upstream 与 location 实现直连
在 nginx.conf 的 http 块内定义 Redis 后端,并在 location 中使用 redis2_query 发起命令:
- 用
upstream声明 Redis 地址(支持单机或简单轮询,不支持健康检查) - location 中用
set或set_unescape_uri提取参数作为 key - 用
redis2_query get $key或redis2_query set $key $val构造指令 - 必须以
redis2_pass指向 upstream 名或直接 IP:port
示例配置:
upstream redis_backend { server 127.0.0.1:6379; }location = /get {
set_unescape_uri $key $arg_key;
redis2_query get $key;
redis2_pass redis_backend;
}
验证连接与调试要点
直连成功的关键不在语法,而在运行时行为:
- 执行
nginx -V 2>&1 | grep redis2确认模块已编译进二进制 - Redis 必须允许来自 Nginx 所在主机的连接(检查
bind和protected-mode no) - 开启
error_log ... debug可看到 redis2 模块的握手、命令发送、响应解析日志 - 响应体是 Redis 原生协议格式(如
$5\r\nworld\r\n),前端需自行解析或配合 Lua 处理










