首頁  >  文章  >  資料庫  >  Nginx怎麼利用Lua+Redis實現動態封鎖IP

Nginx怎麼利用Lua+Redis實現動態封鎖IP

WBOY
WBOY轉載
2023-05-26 10:50:541912瀏覽

一、背景

我們在日常維護網站中,經常會遇到這樣一個需求,為了封鎖某些爬蟲或惡意使用者對伺服器的請求,我們需要建立一個動態的ip 黑名單。對於黑名單之內的 ip ,拒絕提供服務。

二、架構

實作ip 黑名單的功能有很多方法:

1、在作業系統層面,設定iptables,拒絕指定ip 的網路請求;

2、在web server 層面,透過nginx 自身的deny 選項或lua 外掛程式設定ip 黑名單;

#3、在應用程式層面,在在請求服務之前檢查一遍客戶端ip 是否在黑名單。

為了方便管理與分享,我們透過nginx lua redis 的架構實作ip 黑名單的功能,架構圖如下:

Nginx怎麼利用Lua+Redis實現動態封鎖IP

##架構圖


#三、實作

1、安裝nginx lua模組,建議使用openresty,這是一個整合了各種lua 模組的nginx 伺服器:

Nginx怎麼利用Lua+Redis實現動態封鎖IPopenresty

2、安裝並啟動redis 伺服器;

3、設定nginx 範例:

Nginx怎麼利用Lua+Redis實現動態封鎖IPnginx設定

其中

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

Nginx怎麼利用Lua+Redis實現動態封鎖IP

###################################################################### ##指定lua 腳本位置######4、設定lua 腳本,定期從redis 取得最新的ip 黑名單,檔案內容請參考:######https://gist.github.com/ceelog/ 39862d297d9c85e743b3b5111b7d44cb############lua 腳本內容#########5、在redis 伺服器上新建set 類型的資料ip_blacklist,並加入最新的黑名單。 ######完成以上步驟後,重新載入nginx,設定便開始生效了######這時存取伺服器,如果你的ip 位址在黑名單內的話,將出現拒絕存取:### #########拒絕存取######

以上是Nginx怎麼利用Lua+Redis實現動態封鎖IP的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除