首頁 > 運維 > Nginx > 主體

nginx反向代理後,如何防止ddos攻擊

(*-*)浩
發布: 2019-07-22 13:45:53
原創
5648 人瀏覽過

防禦DDOS是一個系統工程,攻擊花樣多,防禦的成本高瓶頸多,防禦起來即被動又無奈。 DDOS的特點是分散式,針對頻寬和服務攻擊,也就 是四層流量攻擊和七層應用攻擊,相應的防禦瓶頸四層在頻寬,七層的多在架構的吞吐量。

nginx反向代理後,如何防止ddos攻擊

一. 限制每秒請求數 

#ngx_http_limit_req_module模組透過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會回傳503錯誤。

設定需要在兩個地方設定:

nginx.conf的http段內定義觸發條件,可以有多個條件 

在location內定義達到觸發條件時nginx所要執行的動作 

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; //触发条件,所有访问ip 限制每秒10个请求    ...
    server {        ...
        location  ~ \.php$ {
            limit_req zone=one burst=5 nodelay;   //执行的动作,通过zone名字对应
               }
           }
     }
登入後複製

#參數說明:

$binary_remote_addr  二進位遠端位址

zone=one :10m    定義zone名字叫one,並為這個zone分配10M內存,用來儲存會話(二進位遠端位址),1m內存可以保存16000會話

rate=10r/s;     限制頻率為每秒10個請求

burst=5         允許超過頻率限制的請求數不多於5個,假設1、2、3、4秒請求為每秒9個,那麼第5秒內請求15個是允許的,反之,如果第一秒內請求15個,會將5個請求放到第二秒,第二秒內超過10的請求直接503,類似多秒內平均速率限制。

nodelay         超過的請求不被延遲處理,設定後15個請求在1秒內處理。

二.限制IP連線數 

ngx_http_limit_conn_module的設定方法和參數與http_limit_req模組很像,參數少,要簡單很多

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m; //触发条件    ...
    server {        ...
        location /download/ {
            limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503
                }
           }
     }
登入後複製

三.白名單設定 

http_limit_conn和http_limit_req模組限制了單ip單位時間內的並發和請求數,但是如果Nginx前面有lvs或者haproxy之類的負載平衡或反向代理,nginx獲取的都是來自負載平衡的連接或請求,這時不應該限制負載平衡的連接和請求,就需要geo和map 模組設定白名單:

geo $whiteiplist  {
        default 1;
        10.11.15.161 0;
    }
map $whiteiplist  $limit {
        1 $binary_remote_addr;
        0 "";
    }
limit_req_zone $limit zone=one:10m rate=10r/s;
limit_conn_zone $limit zone=addr:10m;
登入後複製

更多Nginx相關技術文章,請造訪Nginx使用教學欄位進行學習! 

以上是nginx反向代理後,如何防止ddos攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!