<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx 通過 Lua + Redis 實(shí)現(xiàn)動態(tài)封禁 IP

          共 1264字,需瀏覽 3分鐘

           ·

          2022-02-13 08:45

          原文鏈接:segmentfault.com/a/1190000018267201

          背景

          為了封禁某些爬蟲或者惡意用戶對服務(wù)器的請求,我們需要建立一個動態(tài)的 IP 黑名單。對于黑名單之內(nèi)的 IP ,拒絕提供服務(wù)。

          架構(gòu)

          實(shí)現(xiàn) IP 黑名單的功能有很多途徑:
          1、在操作系統(tǒng)層面,配置 iptables,拒絕指定 IP 的網(wǎng)絡(luò)請求;
          2、在 Web Server 層面,通過 Nginx 自身的 deny 選項(xiàng) 或者 lua 插件 配置 IP 黑名單;
          3、在應(yīng)用層面,在請求服務(wù)之前檢查一遍客戶端 IP 是否在黑名單。

          為了方便管理和共享,我們選擇通過 Nginx+Lua+Redis 的架構(gòu)實(shí)現(xiàn) IP 黑名單的功能,架構(gòu)圖如下:

          實(shí)現(xiàn)

          1、安裝 Nginx+Lua模塊,推薦使用 OpenResty,這是一個集成了各種 Lua 模塊的 Nginx 服務(wù)器:


          2、安裝并啟動 Redis 服務(wù)器;


          3、配置 Nginx 示例:


          Nginx 配置

          其中

          lua_shared_dict ip_blacklist 1m;

          由 Nginx 進(jìn)程分配一塊 1M 大小的共享內(nèi)存空間,用來緩存 IP 黑名單。

          access_by_lua_file lua/ip_blacklist.lua;

          指定 lua 腳本位置。

          4、配置 lua 腳本,定期從 Redis 獲取最新的 IP 黑名單。


          5、在 Redis 服務(wù)器上新建 Set 類型的數(shù)據(jù) ip_blacklist,并加入最新的 IP 黑名單。

          完成以上步驟后,重新加載 nginx,配置便開始生效了。這時訪問服務(wù)器,如果你的 IP 地址在黑名單內(nèi)的話,將出現(xiàn)拒絕訪問,如下圖:

          總結(jié)

          以上,便是 Nginx+Lua+Redis 實(shí)現(xiàn)的 IP 黑名單功能,具有如下優(yōu)點(diǎn):

          1、配置簡單、輕量,幾乎對服務(wù)器性能不產(chǎn)生影響;
          2、多臺服務(wù)器可以通過Redis實(shí)例共享黑名單;
          3、動態(tài)配置,可以手工或者通過某種自動化的方式設(shè)置 Redis 中的黑名單。

          - END -

          ?推薦閱讀?






          31天拿下K8s含金量最高的CKA+CKS證書!
          Linux 性能全方位調(diào)優(yōu)經(jīng)驗(yàn)總結(jié)
          最近處理一起線上大故障!總結(jié)了這份經(jīng)驗(yàn)手冊
          最全的 Linux 學(xué)習(xí)思維導(dǎo)圖,建議收藏!
          10 分鐘理解微服務(wù)、容器和 Kubernetes
          阿里巴巴 DevOps 轉(zhuǎn)型后的運(yùn)維平臺建設(shè)
          Kubernetes 生態(tài)架構(gòu)圖
          20張最全的DevOps架構(gòu)師技術(shù)棧圖譜
          Linux Shell 腳本編程最佳實(shí)踐
          做了這么多年運(yùn)維工作,現(xiàn)在才看清職業(yè)方向
          一篇文章講清楚云原生圖景及發(fā)展路線
          K8s kubectl 常用命令總結(jié)(建議收藏)
          K8s運(yùn)維錦囊,19個常見故障解決方法
          搭建一套完整的企業(yè)級高可用?K8s 集群(kubeadm方式)



          點(diǎn)亮,服務(wù)器三年不宕機(jī)

          瀏覽 17
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操B电影院| 免费看的黄色电影一级片 | 男女WWWWWWWWW | 大香蕉黄色网 | 日韩一级无码免费视频 |