如何使用nginx提供redis密钥?

如何使用nginx提供redis密钥?,nginx,kubernetes,redis,nginx-config,Nginx,Kubernetes,Redis,Nginx Config,我所有的json文件都在redis缓存中 我想通过nginx提供服务 # redis-cli -h redis-master redis-master:6379> get "zips/80202.json" "{\"zipCode\":\"80202\",\"City\":\"DENVER\",\"StateCode\":\&quo

我所有的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主机
redis主机
是Kubernetes中的服务

期待得到回应

{"zipCode":"80202","City":"DENVER","StateCode":"CO"}
对于如何配置nginx没有任何清晰的概念。 使用kubernetes容器运行,因此服务是本地的,不需要对redis服务器进行身份验证

非常感谢您对nginx配置的任何帮助。

要通过nginx提供redis数据(key:value)对,您需要以下几点:

  • 例如,redis客户端, . 这个客户会帮忙的 从redis检索数据。您必须使用nodejsexpress才能获得API层
  • 您必须创建一个必须公开的服务 通过入口控制器(如果您想从外部访问它 您的K8s群集
  • Nginx入口控制器配置,用于将请求路由到此服务

  • 这是使用redis密钥的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
            ';
    
            
        }
    }
    

    nginx有一个模块可以与redis集成,无需执行任何代码层即可从redis中提取数据。我尝试了几种不同的配置,但它们都不起作用。看起来json转换是redis2项目的一项任务。通过http,您发送的所有响应都将作为流/字符串,而不是json对象。根据内容类型,客户端将数据转换为各自的对象。http本身是内容无关的。