Nginx訪問控制

2022-09-23 06:37:14 字數 2156 閱讀 6115

涉及模組:ngx_http_access_module

對應指令:

allow

語法: allow address | cidr | unix: | all;

預設值: —

作用域: http, server, location, limit_except

允許某個 ip 或者某個 ip 段訪問。如果指定 unix,那將允許 socket 的訪問。注意:unix 在 1.5.1 中新加入的功能,如果你的版本比這個低,請不要使用這個方法。

deny

語法: deny address | cidr | unix: | all;

預設值: —

作用域: http, server, location, limit_except

禁止某個 ip 或者一個 ip 段訪問。如果指定 unix,那將禁止 socket 的訪問。注意:unix 在 1.5.1 中新加入的功能,如果你的版本比這個低,請不要使用這個方法。

location /
ddos 的特點是分散式,針對頻寬和服務攻擊,也就是四層流量攻擊和七層應用攻擊,相應的防禦瓶頸四層在頻寬,七層的多在架構的吞吐量。對於七層的應用攻擊,我們還是可以做一些配置來防禦的,使用 nginx 的 http_limit_conn 和 http_limit_req 模組通過限制連線數和請求數能相對有效的防禦。

ngx_http_limit_conn_module 可以限制單個 ip 的連線數

ngx_http_limit_req_module 可以限制單個 ip 每秒請求數

ngx_http_limit_req_module模組通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會返回503錯誤。配置需要在兩個地方設定:

nginx.conf的http段內定義觸發條件,可以有多個條件 在location內定義達到觸發條件時nginx所要執行的動作

ngx_http_limit_req_module模組通過漏桶原理來限制單位時間內的請求數,一旦單位時間內請求數超過限制,就會返回503錯誤。配置需要在兩個地方設定:

nginx.conf的http段內定義觸發條件,可以有多個條件 在location內定義達到觸發條件時nginx所要執行的動作

引數說明

$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秒內處理。

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

geo $whiteiplist  

map $whiteiplist $limit

limit_req_zone $limit zone=one:10m rate=10r/s;

limit_conn_zone $limit zone=addr:10m;

geo 模組定義了一個預設值是 1 的變數 whiteiplist,當在 ip 在白名單中,變數 whiteiplist 的值為 0,反之為 1

下面是設定的邏輯關係解釋:

如果在白名單中--> whiteiplist=0 --> $limit="" --> 不會儲存到 10m 的會話狀態(one 或者 addr)中 --> 不受限制;

反之,不在白名單中 --> whiteiplist=1 --> $limit=二進位制遠端地址 -->儲存進 10m 的會話狀態中 --> 受到限制。

修改/etc/nginx/nginx.conf

http

Nginx 訪問控制

訪問控制配置 虛擬主機下加入 allow 219 232 244 234 deny all 限制只讓某個ip訪問 1 首先建立下面的配置檔案放在nginx的conf目錄下面 命名為deny ip vim usr local nginx conf deny ip allow 1 1 1 1 allow...

nginx 的訊號控制概述

nginx 在ubuntu 上的啟動,停止,重啟》中的停止和重啟命令基本都是用訊號來控制的。這是一些簡單的訊號控制。 在nginx伺服器中,...

Nginx

nginx engine x 是一個高效能的http和反向 web伺服器。 什麼是正向 ? 訪問某個 如谷歌,需要進行配置,並通過 伺服器才...