nginx 429狀態(tài)碼排查與處理方式
 Nginx 返回 429 Too Many Requests 錯(cuò)誤表示客戶端在短時(shí)間內(nèi)發(fā)送了過多請求,觸發(fā)了Nginx的請求限流規(guī)則。
這通常是Nginx配置了請求頻率限制(limit_req 模塊)或連接數(shù)限制(limit_conn 模塊)的結(jié)果。
以下是排查和解決方案:
1.確認(rèn)限流配置位置
在Nginx配置文件中(通常是 nginx.conf 或 sites-enabled/ 下的文件),檢查以下配置:
http {
    # 定義限流區(qū)域(通常放在 http 塊中)
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; # 示例:每秒10請求
    server {
        location / {
            # 應(yīng)用限流規(guī)則
            limit_req zone=one burst=20 nodelay; # 關(guān)鍵配置行
        }
    }
}limit_req_zone: 定義限流區(qū)域(名稱、內(nèi)存大小、限流速率)。limit_req: 在location或server塊中啟用限流。
2.調(diào)整限流參數(shù)
根據(jù)實(shí)際需求修改以下參數(shù):
rate: 允許的平均請求速率。- 例如 
rate=5r/s(每秒5次)或rate=30r/m(每分鐘30次)。 burst: 允許的突發(fā)請求數(shù)(臨時(shí)超過rate的請求會被放入隊(duì)列)。nodelay: 突發(fā)請求立即處理(不延遲),但超過burst的請求會被拒絕。
示例調(diào)整:
# 放寬限流:每秒20請求 + 允許40個(gè)突發(fā)請求
limit_req_zone $binary_remote_addr zone=one:10m rate=20r/s;
location / {
    limit_req zone=one burst=40 nodelay;
}3.檢查其他可能的限流配置
limit_conn(連接數(shù)限制):
limit_conn_zone $binary_remote_addr zone=addr:10m;
location / {
    limit_conn addr 10; # 每個(gè)IP最多10個(gè)并發(fā)連接
}多級限流:檢查是否在多個(gè)位置(如 server、location)重復(fù)配置了限流。
4.定位觸發(fā)限流的客戶端
查看Nginx錯(cuò)誤日志,找到觸發(fā)429的客戶端IP:
grep "429" /var/log/nginx/error.log
輸出示例:
2023/10/01 12:00:00 [error] 12345#0: *100000 limiting requests, client: 192.168.1.1, ...
5.臨時(shí)禁用限流(測試用)
若需確認(rèn)問題,可注釋掉配置中的 limit_req 和 limit_conn 行,并重載Nginx:
sudo nginx -s reload
6.優(yōu)化建議
區(qū)分靜態(tài)資源:對靜態(tài)文件(如圖片/CSS)禁用限流:
location ~* \.(jpg|css|js)$ {
    limit_req off; # 不限制靜態(tài)資源
}按業(yè)務(wù)分層限流:對API路徑設(shè)置更嚴(yán)格的限制:
location /api/ {
    limit_req zone=api_zone;
}增大內(nèi)存區(qū)域:如果IP很多,增加 limit_req_zone 的內(nèi)存(如 zone=one:20m)。
7.高級場景:動(dòng)態(tài)限流
如果需要?jiǎng)討B(tài)調(diào)整限流規(guī)則(例如根據(jù)業(yè)務(wù)狀態(tài)),可結(jié)合OpenResty + Lua腳本:
location / {
    access_by_lua_block {
        -- 自定義Lua腳本實(shí)現(xiàn)動(dòng)態(tài)限流
    }
}總結(jié)步驟
- 檢查Nginx配置:找到 
limit_req或limit_conn的位置。 - 調(diào)整速率/突發(fā)值:根據(jù)業(yè)務(wù)需求優(yōu)化參數(shù)。
 - 查日志確認(rèn)觸發(fā)源:分析是否由正常流量或爬蟲導(dǎo)致。
 - 重載配置:修改后執(zhí)行 
sudo nginx -s reload。 
注意:
過嚴(yán)的限流會影響用戶體驗(yàn),過松則可能無法保護(hù)后端。建議通過壓測確定合理閾值。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
 504?Gateway?Timeout網(wǎng)關(guān)超時(shí)詳細(xì)解決方法
這篇文章主要介紹了504?Gateway?Timeout網(wǎng)關(guān)超時(shí)詳細(xì)解決方法的相關(guān)資料,504GatewayTimeout是HTTP狀態(tài)碼,表示網(wǎng)關(guān)或代理服務(wù)器在等待上游服務(wù)器響應(yīng)時(shí)超時(shí),常見觸發(fā)場景包括Nginx超時(shí)、后端性能問題、網(wǎng)絡(luò)延遲和服務(wù)器資源耗盡,需要的朋友可以參考下2025-02-02
 nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解
這篇文章主要為大家介紹了nginx pod hook鉤子優(yōu)雅關(guān)閉示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
 Linux查看nginx安裝目錄和配置文件路徑的實(shí)現(xiàn)
本文主要介紹了Linux查看nginx安裝目錄和配置文件路徑的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
 Nginx配置PATHINFO隱藏thinkphp index.php
這篇文章主要介紹了Nginx配置PATHINFO隱藏thinkphp index.php,本文直接給出配置示例,需要的朋友可以參考下2015-07-07
 Linux中Nginx的防盜鏈和優(yōu)化的實(shí)現(xiàn)代碼
今天是周末小編在值班哈,很開森,工作使我快樂,本文重點(diǎn)給大家介紹Linux中Nginx的防盜鏈和優(yōu)化問題及實(shí)現(xiàn)代碼,需要的朋友跟隨小編一起看看吧2021-06-06

