如何使用 Nginx 服务 Redis 密钥?
How to serve Redis key with Nginx?
我的所有 JSON 文件都位于 Redis 缓存中。
我想通过 Nginx 获取它。
# redis-cli -h redis-master
redis-master:6379> get "zips/80202.json"
"{\"zipCode\":\"80202\",\"City\":\"DENVER\",\"StateCode\":\"CO\"}"
我想请求 url 像,
http://nginx-host/zips/80202.json
其中 nginx-host
和 redis-master
是 Kubernetes 中的服务。
期待回复,
{"zipCode":"80202","City":"DENVER","StateCode":"CO"}
我没有找到关于如何配置 Nginx 的清晰思路。我是 运行 Kubernetes 容器,因此服务是本地的,不需要对 Redis 服务器进行身份验证。
要通过 Nginx 提供 redis 数据(键:值)对,您需要以下内容:
- 一个redis客户端,例如,
https://github.com/NodeRedis/node-redis。这个客户会帮忙
从 redis 中检索数据。您将需要 NodeJs Express 为您提供 API 层
- 您必须创建一个服务,该服务必须公开
通过入口控制器(如果你想从外部访问它
你的 K8s 集群
- Nginx 入口控制器配置以将请求路由到此服务
这里是用于服务redis key的nginx配置,
resolver local=on ipv6=off;
server {
listen 9000;
location / {
set $target '';
access_by_lua '
local key = ngx.var.request_uri
if not key then
ngx.log(ngx.ERR, "no key requested")
return ngx.exit(400)
end
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000) -- 1 second
local ok, err = red:connect("redis-master.default.svc.cluster.local", 6379)
if not ok then
ngx.log(ngx.ERR, "failed to connect to redis: ", err)
return ngx.exit(500)
end
local value, err = red:get(key)
if not value then
ngx.log(ngx.ERR, "failed to get redis key: ", err)
ngx.status = 500
ngx.say("Something not right")
return ngx.exit(ngx.OK)
end
if value == ngx.null then
ngx.log(ngx.ERR, "no host found for key ", key)
ngx.status = 404
ngx.say("Not found")
return ngx.exit(ngx.OK)
end
if value then
ngx.say(value)
return
end
ngx.var.target = http
';
}
}
我的所有 JSON 文件都位于 Redis 缓存中。
我想通过 Nginx 获取它。
# redis-cli -h redis-master
redis-master:6379> get "zips/80202.json"
"{\"zipCode\":\"80202\",\"City\":\"DENVER\",\"StateCode\":\"CO\"}"
我想请求 url 像,
http://nginx-host/zips/80202.json
其中 nginx-host
和 redis-master
是 Kubernetes 中的服务。
期待回复,
{"zipCode":"80202","City":"DENVER","StateCode":"CO"}
我没有找到关于如何配置 Nginx 的清晰思路。我是 运行 Kubernetes 容器,因此服务是本地的,不需要对 Redis 服务器进行身份验证。
要通过 Nginx 提供 redis 数据(键:值)对,您需要以下内容:
- 一个redis客户端,例如, https://github.com/NodeRedis/node-redis。这个客户会帮忙 从 redis 中检索数据。您将需要 NodeJs Express 为您提供 API 层
- 您必须创建一个服务,该服务必须公开 通过入口控制器(如果你想从外部访问它 你的 K8s 集群
- Nginx 入口控制器配置以将请求路由到此服务
这里是用于服务redis key的nginx配置,
resolver local=on ipv6=off;
server {
listen 9000;
location / {
set $target '';
access_by_lua '
local key = ngx.var.request_uri
if not key then
ngx.log(ngx.ERR, "no key requested")
return ngx.exit(400)
end
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000) -- 1 second
local ok, err = red:connect("redis-master.default.svc.cluster.local", 6379)
if not ok then
ngx.log(ngx.ERR, "failed to connect to redis: ", err)
return ngx.exit(500)
end
local value, err = red:get(key)
if not value then
ngx.log(ngx.ERR, "failed to get redis key: ", err)
ngx.status = 500
ngx.say("Something not right")
return ngx.exit(ngx.OK)
end
if value == ngx.null then
ngx.log(ngx.ERR, "no host found for key ", key)
ngx.status = 404
ngx.say("Not found")
return ngx.exit(ngx.OK)
end
if value then
ngx.say(value)
return
end
ngx.var.target = http
';
}
}