在 Nginx 中给 Redis 添加一个 key/value
Add a key/value to Redis in Nginx
我想从 nginx 与 redis 通信,以便将对图像发出的请求存储在列表中,尤其是在另一台服务器上代理的未找到的图像上。
我安装了 OpenResty,以便使用 redis2_query
和 redis2_pass
命令。
这是我的 nginx 配置:
location ~* \.(jpg|jpeg|gif|png)$ {
try_files $uri @imagenotfound;
redis2_query lpush founds $uri;
redis2_pass 127.0.0.1:6379;
}
location @imagenotfound {
proxy_pass http://imgdomain.com/$uri;
proxy_set_header Host imgdomain.com;
proxy_set_header Server imgdomain.com;
redis2_query lpush notfounds $uri;
redis2_pass 127.0.0.1:6379;
}
每个请求我都将 return 设为一个整数,据我所知,redis2_pass
return 是查询的结果。有没有办法不return这个结果,只执行查询?
如果我删除 redis2_query
和 redis2_pass
,图像将正确显示。
在此先感谢您的帮助!
一个似乎可行的解决方案是将 Lua 脚本与 access_by_lua 和 resty.redis 模块一起使用:
location ~* \.(jpg|jpeg|gif|png)$ {
try_files $uri @imagenotfound;
access_by_lua '
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
ok, err = red:lpush("founds", ngx.var.uri)
if not ok then
ngx.say("failed to set founds: ", err)
return
end
';
}
location @imagenotfound {
proxy_pass http://imgdomain.com/$uri;
proxy_set_header Host imgdomain.com;
proxy_set_header Server imgdomain.com;
access_by_lua '
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
ok, err = red:lpush("notfounds", ngx.var.uri)
if not ok then
ngx.say("failed to set notfounds: ", err)
return
end
';
}
如果有人有 Lua 技能并且可以告诉我这样做是否正确,我很乐意得到他的反馈!
无论如何,感谢您在评论中的帮助。
我想从 nginx 与 redis 通信,以便将对图像发出的请求存储在列表中,尤其是在另一台服务器上代理的未找到的图像上。
我安装了 OpenResty,以便使用 redis2_query
和 redis2_pass
命令。
这是我的 nginx 配置:
location ~* \.(jpg|jpeg|gif|png)$ {
try_files $uri @imagenotfound;
redis2_query lpush founds $uri;
redis2_pass 127.0.0.1:6379;
}
location @imagenotfound {
proxy_pass http://imgdomain.com/$uri;
proxy_set_header Host imgdomain.com;
proxy_set_header Server imgdomain.com;
redis2_query lpush notfounds $uri;
redis2_pass 127.0.0.1:6379;
}
每个请求我都将 return 设为一个整数,据我所知,redis2_pass
return 是查询的结果。有没有办法不return这个结果,只执行查询?
如果我删除 redis2_query
和 redis2_pass
,图像将正确显示。
在此先感谢您的帮助!
一个似乎可行的解决方案是将 Lua 脚本与 access_by_lua 和 resty.redis 模块一起使用:
location ~* \.(jpg|jpeg|gif|png)$ {
try_files $uri @imagenotfound;
access_by_lua '
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
ok, err = red:lpush("founds", ngx.var.uri)
if not ok then
ngx.say("failed to set founds: ", err)
return
end
';
}
location @imagenotfound {
proxy_pass http://imgdomain.com/$uri;
proxy_set_header Host imgdomain.com;
proxy_set_header Server imgdomain.com;
access_by_lua '
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
ok, err = red:lpush("notfounds", ngx.var.uri)
if not ok then
ngx.say("failed to set notfounds: ", err)
return
end
';
}
如果有人有 Lua 技能并且可以告诉我这样做是否正确,我很乐意得到他的反馈!
无论如何,感谢您在评论中的帮助。