一、背景
我們在日常維護網站中,經常會遇到這樣一個需求,為了封鎖某些爬蟲或惡意使用者對伺服器的請求,我們需要建立一個動態的ip 黑名單。對於黑名單之內的 ip ,拒絕提供服務。
二、架構
實作ip 黑名單的功能有很多方法:
1、在作業系統層面,設定iptables,拒絕指定ip 的網路請求;
2、在web server 層面,透過nginx 自身的deny 選項或lua 外掛程式設定ip 黑名單;
#3、在應用程式層面,在在請求服務之前檢查一遍客戶端ip 是否在黑名單。
為了方便管理與分享,我們透過nginx lua redis 的架構實作ip 黑名單的功能,架構圖如下:
##架構圖#三、實作
1、安裝nginx lua模組,建議使用openresty,這是一個整合了各種lua 模組的nginx 伺服器:openresty
nginx設定
lua_shared_dict ip_blacklist 1m;由nginx 進程分配一塊1m 大小的共享記憶體空間,用來快取ip 黑名單,請參閱:https://github.com/openresty/lua-nginx-module#lua_shared_dict
access_by_lua_file lua/ip_blacklist.lua;
以上是Nginx怎麼利用Lua+Redis實現動態封鎖IP的詳細內容。更多資訊請關注PHP中文網其他相關文章!