我正在openresty(1.13.6.2)中使用lua脚本禁止蜘蛛。它将探测非法IP并添加到黑名单。
res , err = cache:sadd('black-list', ngx.var.remote_addr)
现在我想让黑名单每天12:00过期(发布禁令ip)。每天如何到期设置?正确的方法是什么?这是禁止的禁止代码:
is_black ,err = cache:sismember('black_list', ngx.var.remote_addr)
if is_black == 1 then
ngx.exit(ngx.HTTP_FORBIDDEN)
goto label
end
答案 0 :(得分:1)
作为替代方案:您可以使用string
redis数据类型来保存IP,而不是set
(为方便搜索,您可以在密钥中使用一些通用部分,例如black_list
; redis键可以用分号分隔):
# redis cli commands
set black_list:127.0.0.1 127.0.0.1 EX 3600 # will be expire in 1 hour
set black_list:127.0.0.2 127.0.0.2 EX 60 # will be expire in 1 minute
set black_list:127.0.0.3 127.0.0.3 EX 60 # will be expire in 1 minute
在这种情况下,您可以计算(12:00 - now
并为每个IP记录设置TTL (time to live)
,它们将在需要的时间自动过期,而无需执行代码中的任何其他操作。