最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx限流防刷與CC攻擊防護(hù)實(shí)戰(zhàn)配置

 更新時(shí)間:2026年01月19日 10:52:05   作者:嘻哈baby  
本文介紹了Nginx在Web服務(wù)中的防護(hù)方案,包括限流基礎(chǔ)、分場(chǎng)景限流、CC攻擊防護(hù)、IP黑白名單、監(jiān)控與告警以及壓測(cè)驗(yàn)證,感興趣的可以了解一下

做過(guò)Web服務(wù)的都知道,接口裸奔是找死。

不設(shè)防的后果:羊毛黨刷爆優(yōu)惠券、爬蟲(chóng)拖垮服務(wù)器、CC攻擊搞癱業(yè)務(wù)。

整理一下Nginx層面的防護(hù)方案,都是生產(chǎn)環(huán)境驗(yàn)證過(guò)的配置。

一、限流基礎(chǔ)

Nginx有兩個(gè)核心限流模塊:

  • ngx_http_limit_req_module:限制請(qǐng)求速率
  • ngx_http_limit_conn_module:限制連接數(shù)

1.1 限制請(qǐng)求速率

http {
    # 定義限流區(qū)域
    # $binary_remote_addr:按客戶端IP限流
    # zone=req_limit:10m:共享內(nèi)存區(qū)域名和大小
    # rate=10r/s:每秒10個(gè)請(qǐng)求
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    
    server {
        location /api/ {
            # 應(yīng)用限流
            # burst=20:允許突發(fā)20個(gè)請(qǐng)求
            # nodelay:突發(fā)請(qǐng)求不延遲處理
            limit_req zone=req_limit burst=20 nodelay;
            
            proxy_pass http://backend;
        }
    }
}

參數(shù)解釋:

  • rate=10r/s:平均每秒10個(gè)請(qǐng)求,即每100ms一個(gè)
  • burst=20:桶大小,允許突發(fā)20個(gè)請(qǐng)求
  • nodelay:突發(fā)請(qǐng)求立即處理,不排隊(duì)等待

1.2 限制連接數(shù)

http {
    # 按IP限制連接數(shù)
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    
    server {
        location /download/ {
            # 每個(gè)IP最多10個(gè)連接
            limit_conn conn_limit 10;
            
            # 限制每個(gè)連接的速度
            limit_rate 1m;  # 1MB/s
        }
    }
}

適用場(chǎng)景:下載服務(wù)、視頻流媒體。

二、分場(chǎng)景限流

2.1 登錄接口防暴力破解

http {
    # 登錄接口嚴(yán)格限流
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
    
    server {
        location /api/login {
            limit_req zone=login_limit burst=5 nodelay;
            
            # 超限返回429
            limit_req_status 429;
            
            proxy_pass http://backend;
        }
    }
}

每秒只允許1次登錄請(qǐng)求,防止暴力破解。

2.2 短信驗(yàn)證碼防刷

http {
    # 驗(yàn)證碼接口更嚴(yán)格
    limit_req_zone $binary_remote_addr zone=sms_limit:10m rate=1r/m;
    
    server {
        location /api/sms/send {
            # 每分鐘1次
            limit_req zone=sms_limit burst=3;
            
            proxy_pass http://backend;
        }
    }
}

2.3 搜索接口防爬蟲(chóng)

http {
    # 搜索接口中等限流
    limit_req_zone $binary_remote_addr zone=search_limit:10m rate=5r/s;
    
    server {
        location /api/search {
            limit_req zone=search_limit burst=10 nodelay;
            
            proxy_pass http://backend;
        }
    }
}

三、CC攻擊防護(hù)

CC攻擊就是用大量代理IP發(fā)請(qǐng)求,單IP限流不夠用。

3.1 請(qǐng)求頻率+并發(fā)連接雙重限制

http {
    limit_req_zone $binary_remote_addr zone=cc_req:10m rate=30r/s;
    limit_conn_zone $binary_remote_addr zone=cc_conn:10m;
    
    server {
        # 請(qǐng)求頻率限制
        limit_req zone=cc_req burst=50 nodelay;
        
        # 并發(fā)連接限制
        limit_conn cc_conn 50;
        
        # 超限狀態(tài)碼
        limit_req_status 503;
        limit_conn_status 503;
    }
}

3.2 基于User-Agent過(guò)濾

server {
    # 封禁空UA和常見(jiàn)爬蟲(chóng)UA
    if ($http_user_agent = "") {
        return 403;
    }
    
    if ($http_user_agent ~* "python|curl|wget|scrapy|httpclient") {
        return 403;
    }
    
    # 封禁特定UA
    if ($http_user_agent ~* "MJ12bot|AhrefsBot|SemrushBot") {
        return 403;
    }
}

3.3 基于Referer過(guò)濾

server {
    location /api/ {
        valid_referers none blocked server_names *.example.com;
        
        if ($invalid_referer) {
            return 403;
        }
    }
}

3.4 cookie驗(yàn)證

server {
    location / {
        # 檢查是否有驗(yàn)證cookie
        if ($cookie_verified != "yes") {
            # 返回驗(yàn)證頁(yè)面,通過(guò)JS設(shè)置cookie后重定向
            return 302 /verify.html;
        }
        
        proxy_pass http://backend;
    }
}

這個(gè)方法可以過(guò)濾掉不執(zhí)行JS的簡(jiǎn)單爬蟲(chóng)。

四、IP黑白名單

4.1 黑名單

http {
    # 加載黑名單文件
    geo $blocked_ip {
        default 0;
        include /etc/nginx/blacklist.conf;
    }
    
    server {
        if ($blocked_ip) {
            return 403;
        }
    }
}

黑名單文件:

# /etc/nginx/blacklist.conf
1.2.3.4 1;
5.6.7.0/24 1;

4.2 白名單

http {
    geo $whitelist {
        default 0;
        10.0.0.0/8 1;      # 內(nèi)網(wǎng)
        192.168.0.0/16 1;  # 內(nèi)網(wǎng)
    }
    
    server {
        location /admin/ {
            if ($whitelist = 0) {
                return 403;
            }
            
            proxy_pass http://backend;
        }
    }
}

4.3 動(dòng)態(tài)封禁

配合fail2ban實(shí)現(xiàn)自動(dòng)封禁:

# /etc/fail2ban/filter.d/nginx-cc.conf
[Definition]
failregex = ^<HOST> .* "(GET|POST).* HTTP.*" (429|503)
ignoreregex =
# /etc/fail2ban/jail.d/nginx-cc.conf
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600

60秒內(nèi)觸發(fā)100次429/503就封禁1小時(shí)。

五、實(shí)戰(zhàn)配置模板

綜合以上方案的完整配置:

http {
    # 限流區(qū)域定義
    limit_req_zone $binary_remote_addr zone=global_limit:20m rate=50r/s;
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s;
    limit_req_zone $binary_remote_addr zone=login_limit:10m rate=1r/s;
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    
    # 黑名單
    geo $blocked_ip {
        default 0;
        include /etc/nginx/blacklist.conf;
    }
    
    # 白名單
    geo $whitelist {
        default 0;
        10.0.0.0/8 1;
        192.168.0.0/16 1;
    }
    
    server {
        listen 80;
        server_name example.com;
        
        # 黑名單攔截
        if ($blocked_ip) {
            return 403;
        }
        
        # 空UA攔截
        if ($http_user_agent = "") {
            return 403;
        }
        
        # 全局限流
        limit_req zone=global_limit burst=100 nodelay;
        limit_conn conn_limit 100;
        
        # API接口限流
        location /api/ {
            limit_req zone=api_limit burst=30 nodelay;
            proxy_pass http://backend;
        }
        
        # 登錄接口嚴(yán)格限流
        location /api/login {
            limit_req zone=login_limit burst=5 nodelay;
            limit_req_status 429;
            proxy_pass http://backend;
        }
        
        # 靜態(tài)資源不限流
        location /static/ {
            expires 7d;
            add_header Cache-Control "public, immutable";
        }
        
        # 管理后臺(tái)白名單
        location /admin/ {
            if ($whitelist = 0) {
                return 403;
            }
            proxy_pass http://backend;
        }
    }
}

六、監(jiān)控與告警

光限流不夠,還要能看到發(fā)生了什么。

6.1 日志格式

log_format detailed '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    '$request_time $upstream_response_time '
                    '$limit_req_status';

access_log /var/log/nginx/access.log detailed;

6.2 實(shí)時(shí)統(tǒng)計(jì)

# 統(tǒng)計(jì)429狀態(tài)碼
tail -f /var/log/nginx/access.log | grep " 429 " | wc -l

# 按IP統(tǒng)計(jì)請(qǐng)求數(shù)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

6.3 自定義限流日志

location /api/ {
    limit_req zone=api_limit burst=30 nodelay;
    
    # 限流日志
    limit_req_log_level warn;
}

被限流的請(qǐng)求會(huì)記錄到error.log:

limiting requests, excess: 30.234 by zone "api_limit"

七、壓測(cè)驗(yàn)證

配置完要驗(yàn)證效果:

# 用ab壓測(cè)
ab -n 1000 -c 100 http://example.com/api/test

# 用wrk壓測(cè)
wrk -t4 -c200 -d30s http://example.com/api/test

觀察:

  • 正常請(qǐng)求能過(guò)
  • 超限請(qǐng)求返回429或503
  • 服務(wù)器資源沒(méi)被打滿

八、遠(yuǎn)程管理

我們有幾個(gè)邊緣節(jié)點(diǎn)部署了Nginx做CDN,分布在不同城市。之前更新配置很麻煩,現(xiàn)在用星空組網(wǎng)把所有節(jié)點(diǎn)組到一起,SSH直連更新配置很方便。

總結(jié)

Nginx防護(hù)策略:

攻擊類型防護(hù)方案核心配置
單IP刷接口請(qǐng)求速率限制limit_req
下載帶寬濫用連接數(shù)+速度限制limit_conn + limit_rate
暴力破解嚴(yán)格限流rate=1r/s
CC攻擊多層防護(hù)限流+UA過(guò)濾+黑名單
爬蟲(chóng)UA+Referer過(guò)濾if判斷

防護(hù)策略要分層:

  1. 第一層:IP黑名單
  2. 第二層:速率限制
  3. 第三層:行為判斷
  4. 第四層:驗(yàn)證碼(業(yè)務(wù)層)

別等被攻擊了才想起來(lái)加防護(hù)。

到此這篇關(guān)于Nginx限流防刷與CC攻擊防護(hù)實(shí)戰(zhàn)配置的文章就介紹到這了,更多相關(guān)Nginx限流防刷與CC防護(hù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx中404頁(yè)面的配置及AJAX請(qǐng)求返回404頁(yè)面的方法

    Nginx中404頁(yè)面的配置及AJAX請(qǐng)求返回404頁(yè)面的方法

    404是請(qǐng)求頁(yè)面不存在的錯(cuò)誤代碼,在Nginx中有時(shí)處理jQuery中的ajax方法雖然能返回404頁(yè)面但錯(cuò)誤代碼卻返回200,針對(duì)此問(wèn)題我們具體來(lái)看一下Nginx中404頁(yè)面的配置及AJAX請(qǐng)求返回404頁(yè)面的方法
    2016-05-05
  • 在ubuntu下為nginx配置支持cgi腳本的方案

    在ubuntu下為nginx配置支持cgi腳本的方案

    本文的需求:讓nginx能夠解析.cgi后綴的文件,相信會(huì)特意看這篇文章的人對(duì)CGI是什么及其作用已經(jīng)有了足夠的了解,所以在這里不再贅述,直接開(kāi)始配置。
    2017-02-02
  • 詳解nginx靜態(tài)資源服務(wù)器簡(jiǎn)單配置

    詳解nginx靜態(tài)資源服務(wù)器簡(jiǎn)單配置

    這篇文章主要介紹了詳解nginx靜態(tài)資源服務(wù)器簡(jiǎn)單配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Nginx禁止IP訪問(wèn)只允許域名訪問(wèn)及防盜鏈設(shè)置

    Nginx禁止IP訪問(wèn)只允許域名訪問(wèn)及防盜鏈設(shè)置

    我們?cè)谑褂玫臅r(shí)候會(huì)遇到很多的惡意IP攻擊,這個(gè)時(shí)候就要用到Nginx 禁止IP訪問(wèn)了,本文主要介紹了Nginx禁止IP訪問(wèn)只允許域名訪問(wèn)及Nginx防盜鏈設(shè)置,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 詳解Nginx配置多站點(diǎn)需要踩的坑

    詳解Nginx配置多站點(diǎn)需要踩的坑

    本篇文章主要介紹了詳解Nginx配置多站點(diǎn)需要踩的坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Nginx路由匹配規(guī)則及優(yōu)先級(jí)詳解

    Nginx路由匹配規(guī)則及優(yōu)先級(jí)詳解

    Nginx作為一個(gè)高性能的Web服務(wù)器和反向代理服務(wù)器,廣泛用于負(fù)載均衡、請(qǐng)求轉(zhuǎn)發(fā)等場(chǎng)景,在配置Nginx時(shí),路由匹配規(guī)則是非常重要的概念,本文將詳細(xì)介紹Nginx的路由匹配規(guī)則及其優(yōu)先級(jí),需要的朋友可以參考下
    2025-05-05
  • Nginx服務(wù)器中的重定向配置參考指南

    Nginx服務(wù)器中的重定向配置參考指南

    這里簡(jiǎn)單整理了一份Nginx服務(wù)器中的重定向配置參考指,包括rewrite模塊的配置以及301重定向的設(shè)置等,需要的朋友可以參考下
    2016-05-05
  • windows下nginx服務(wù)關(guān)不掉問(wèn)題解決

    windows下nginx服務(wù)關(guān)不掉問(wèn)題解決

    這篇文章主要給大家介紹了關(guān)于windows下nginx服務(wù)關(guān)不掉問(wèn)題解決的相關(guān)資料,nginx是一種網(wǎng)絡(luò)服務(wù)器,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Nginx SSL配置錯(cuò)誤問(wèn)題及解決

    Nginx SSL配置錯(cuò)誤問(wèn)題及解決

    本文詳細(xì)介紹了Nginx SSL配置的常見(jiàn)錯(cuò)誤及其解決方法,包括證書(shū)與私鑰不匹配、協(xié)議版本錯(cuò)誤、證書(shū)鏈未配置、加密套件配置錯(cuò)誤、不安全的SSL配置等,同時(shí),文章還提供了一些優(yōu)化建議,如啟用OCSP Stapling和Session Resumption,以提高Nginx的SSL性能
    2025-02-02
  • nginx?location指令(匹配順序匹配沖突)實(shí)戰(zhàn)示例詳解

    nginx?location指令(匹配順序匹配沖突)實(shí)戰(zhàn)示例詳解

    這篇文章主要介紹了nginx?location指令(實(shí)戰(zhàn)示例匹配順序匹配沖突)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評(píng)論

富平县| 象山县| 德格县| 什邡市| 东乡族自治县| 白玉县| 洛浦县| 石家庄市| 和平区| 广汉市| 耒阳市| 望城县| 永靖县| 中卫市| 隆昌县| 赣榆县| 平潭县| 双辽市| 柳江县| 临城县| 剑河县| 杭锦后旗| 五指山市| 青岛市| 西畴县| 淮阳县| 镇沅| 礼泉县| 互助| 蒙山县| 松江区| 平安县| 鹿邑县| 凌源市| 油尖旺区| 利川市| 崇信县| 泽库县| 昆明市| 纳雍县| 广水市|