我在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
作为替代方案:您可以使用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)
,它们将在所需的时间内自动过期,而无需代码中的任何其他操作。