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

防御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使用教程欄目進行學習!?

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享