nginx服務(wù)訪問(wèn)流量控制
- 網(wǎng)站受到攻擊,使網(wǎng)站壓力過(guò)大
- 方式一: 基于IP地址連接數(shù)進(jìn)行控制
說(shuō)明: 控制一個(gè)源IP地址只能建立1個(gè)連接
http_limit_conn_module
配置指令信息:
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
key: 變量信息,在連接建立后,收集什么信息做控制管理
· $remote_addr 變量的長(zhǎng)度為7字節(jié)到15字節(jié) 存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié),在64位平臺(tái)中占用64字節(jié)秉版。
· $binary_remote_addr 變量的長(zhǎng)度是固定的4字節(jié) 存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié)终议,在64位平臺(tái)中占用64字節(jié)糙臼。
1M共享空間可以保存3.2萬(wàn)個(gè)32位的狀態(tài),1.6萬(wàn)個(gè)64位的狀態(tài)公黑。
zone: 定義共享存儲(chǔ)空間
· name: 存儲(chǔ)空間的名稱信息
· size: 存儲(chǔ)空間大小信息
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
zone: 調(diào)用響應(yīng)的存儲(chǔ)空間
number: 限制存儲(chǔ)空間源IP地址可以處理的數(shù)量
配置樣例:
[root@web02 conf.d]# cat www.conf
limit_conn_zone $binary_remote_addr zone=oldboy:10m;
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_conn oldboy 1;
}
- 方式二: 基于用戶訪問(wèn)請(qǐng)求的頻次
http_limit_req_module
配置指令信息:
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
key: 變量信息,在連接建立后,收集什么信息做控制管理
· $remote_addr 變量的長(zhǎng)度為7字節(jié)到15字節(jié) 存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié),在64位平臺(tái)中占用64字節(jié)。
· $binary_remote_addr 變量的長(zhǎng)度是固定的4字節(jié) 存儲(chǔ)狀態(tài)在32位平臺(tái)中占用32字節(jié)或64字節(jié)荣德,在64位平臺(tái)中占用64字節(jié)闷煤。
1M共享空間可以保存3.2萬(wàn)個(gè)32位的狀態(tài),1.6萬(wàn)個(gè)64位的狀態(tài)涮瞻。
zone: 定義共享存儲(chǔ)空間
· name: 存儲(chǔ)空間的名稱信息
· size: 存儲(chǔ)空間大小信息
rate: 多個(gè)請(qǐng)求頻次信息
Syntax: limit_req zone=name [burst=number] [nodelay];
Default: —
Context: http, server, location
burst=number: 最大的請(qǐng)求閾值, 超過(guò)閾值請(qǐng)求都會(huì)進(jìn)行控制
[root@web02 conf.d]# cat www.conf
limit_req_zone $binary_remote_addr zone=creq:10m rate=1r/s;
server {
listen 80;
server_name www.oldboy.com;
root /html/www;
index index.html;
limit_req zone=creq burst=10;
}
nginx服務(wù)程序日志說(shuō)明
- 訪問(wèn)日志: 記錄訪問(wèn)網(wǎng)站用戶信息
訪問(wèn)日志如何配置:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 定義日志信息格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; 定義日志保存路徑
訪問(wèn)日志的信息說(shuō)明:
$remote_addr 客戶端源IP地址
$remote_user 記錄網(wǎng)站認(rèn)證用戶名稱信息
[$time_local] 客戶端訪問(wèn)網(wǎng)站頁(yè)面時(shí)間信息
"$request" 記錄請(qǐng)求行信息
$status 服務(wù)端響應(yīng)的狀態(tài)碼信息
$body_bytes_sent 響應(yīng)報(bào)文的主體內(nèi)容大小信息(字節(jié))
"$http_referer" 記錄跳轉(zhuǎn)到網(wǎng)站,鏈接地址
"$http_user_agent" 記錄訪問(wèn)者客戶端信息
"$http_x_forwarded_for" ????
- 錯(cuò)誤日志: 記錄服務(wù)運(yùn)行狀態(tài)信息/記錄網(wǎng)站訪問(wèn)錯(cuò)誤的信息
錯(cuò)誤日志如何配置:
error_log /var/log/nginx/error.log warn; 指定日志保存路徑/指定記錄日志級(jí)別
常見調(diào)試/運(yùn)行狀態(tài)信息
debug 調(diào)試級(jí)別 對(duì)低級(jí)別記錄信息更多
info 信息級(jí)別
notice 通知級(jí)別
warn 警告級(jí)別(建議) ***
產(chǎn)生信息表示服務(wù)運(yùn)行異常
error 錯(cuò)誤界別 ***
crit 嚴(yán)重的錯(cuò)誤級(jí)別
alert 非常驗(yàn)證的錯(cuò)誤級(jí)別
emerg 災(zāi)難級(jí)別 最高級(jí)別記錄的信息更少