您好,登錄后才能下訂單哦!
這篇文章主要介紹了基于Nginx如何實(shí)現(xiàn)訪(fǎng)問(wèn)控制、連接限制的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇基于Nginx如何實(shí)現(xiàn)訪(fǎng)問(wèn)控制、連接限制文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
1. 默認(rèn)配置語(yǔ)法
nginx.conf作為主配置文件
include /etc/nginx/conf.d/*.conf讀到這會(huì)把該目錄的.conf也讀進(jìn)來(lái)
1.1 全局性的和服務(wù)級(jí)別的
user 設(shè)置使用用戶(hù) worker_processes 進(jìn)行增大并發(fā)連接數(shù)的處理 跟cpu保持一致 八核設(shè)置八個(gè) error_log nginx的錯(cuò)誤日志 pid nginx服務(wù)啟動(dòng)時(shí)候pid
1.2 event對(duì)事件的模塊
worker_connections一個(gè)進(jìn)程允許處理的最大連接數(shù) use定義使用的內(nèi)核模型
1.3 server
root 首頁(yè)的路徑 index 首頁(yè)默認(rèn)訪(fǎng)問(wèn)哪個(gè)頁(yè)面 error_page 500 502 503 504 /50x.html 錯(cuò)誤頁(yè)面 前面的500是**`http狀態(tài)碼`** systemctl restart nginx.service 重啟nginx systemctl reload nginx.service 不關(guān)閉服務(wù)柔和地重啟
2. http
curl-v http://www.baidu.com >/dev/null #-v 同時(shí)顯示狀態(tài)碼等信息 nginx -v #顯示nginx版本及配置文件等信息
3. 日志
日志類(lèi)型:error.log和access.log
error.log(記錄處理http請(qǐng)求的錯(cuò)誤狀態(tài)以及nginx本身服務(wù)的錯(cuò)誤狀態(tài)) access.log(每次http請(qǐng)求的訪(fǎng)問(wèn)狀態(tài))
log_format:設(shè)置了日志的記錄格式,定義日志以什么樣的樣式記錄到error.log、access.log中,log_format的配置只能配置在http模塊中。
access_log配置在http中。
4. 變量
連接限制 limit_conn_module
limit_
conn_module:tcp連接頻率限制, 一次tcp連接可以建立多次http請(qǐng)求。
配置語(yǔ)法:
limit_conn_module語(yǔ)法 | 范圍 | 說(shuō)明 |
---|---|---|
limit_conn_zone 標(biāo)識(shí) zone=空間名:空間大小; | http | 用于聲明一個(gè)存儲(chǔ)空間 |
limit_conn 空間名 并發(fā)限制數(shù); | http、server或location | 用于限制某個(gè)存儲(chǔ)空間的并發(fā)數(shù)量 |
limit_conn_log_level 日志等級(jí); | http、server或location | 當(dāng)達(dá)到最大限制連接數(shù)后, 記錄日志的等級(jí) |
limit_conn_status 狀態(tài)碼; | http、server或location | 當(dāng)超過(guò)限制后,返回的響應(yīng)狀態(tài)碼,默認(rèn)是503 |
zone
空間來(lái)記錄連接狀態(tài), 才能限制數(shù)量。zone
是存儲(chǔ)連接狀態(tài)的空間, 以鍵值對(duì)存儲(chǔ), 通常以客戶(hù)端地址$binary_remote_addr
作為key
來(lái)標(biāo)識(shí)每一個(gè)連接。
當(dāng)zone
空間被耗盡,服務(wù)器將會(huì)對(duì)后續(xù)所有的請(qǐng)求返回503(service temporarily unavailable)
錯(cuò)誤。
請(qǐng)求限制 limit_req_mudule
limit_req_mudule
:http
請(qǐng)求頻率限制, 一次tcp
連接可以建立多次http
請(qǐng)求。
配置語(yǔ)法:
limit_req_mudule語(yǔ)法 | 范圍 | 說(shuō)明 |
---|---|---|
limit_req_zone key zone=空間名:空間大小 rate=每秒請(qǐng)求數(shù); | http | 用于聲明一個(gè)存儲(chǔ)空間 |
limit_req zone=空間名 [burst=隊(duì)列數(shù)] [nodelay]; | http、server或location | 用于限制某個(gè)存儲(chǔ)空間的并發(fā)數(shù)量 |
這里的zone也是用來(lái)存儲(chǔ)連接的一個(gè)空間。
burst 和 nodelay
burst
和nodelay
對(duì)并發(fā)請(qǐng)求設(shè)置了一個(gè)緩沖區(qū)和是否延遲處理的策略。
先假設(shè)有如下zone
配置。
http { limit_req_zone $binan_remote_addr zone=req_zone:1m rate=10r/s; }
情況 1:limit_req zone=req_zone;
第1
秒發(fā)送10
個(gè)請(qǐng)求, 正常響應(yīng)。
第1
秒發(fā)送13
個(gè)請(qǐng)求, 前10
個(gè)請(qǐng)求正常響應(yīng), 后3
個(gè)請(qǐng)求返回503(service temporarily unavailable)
。
不加brust
和nodelay
的情況下,rate=10r/s
每秒只能執(zhí)行10
次請(qǐng)求, 多的直接返回503
錯(cuò)誤。
情況 2:limit_req zone=req_zone brust=5;
第1
秒發(fā)送10
個(gè)請(qǐng)求, 正常響應(yīng)。
第1
秒發(fā)送13
個(gè)請(qǐng)求, 前10
個(gè)請(qǐng)求正常響應(yīng), 后3
個(gè)請(qǐng)求放入brust
等待響應(yīng)。
第1
秒發(fā)送20
個(gè)請(qǐng)求, 前10
個(gè)請(qǐng)求正常響應(yīng), 后5
個(gè)請(qǐng)求放入brust
等待響應(yīng), 最后5
個(gè)請(qǐng)求返回503(service temporarily unavailable)
, 第2
秒執(zhí)行brust
中的5
個(gè)請(qǐng)求。
第1
秒發(fā)送20
個(gè)請(qǐng)求, 前10
個(gè)請(qǐng)求正常響應(yīng), 后5
個(gè)請(qǐng)求放入brust
等待響應(yīng), 最后5
個(gè)請(qǐng)求返回503(service temporarily unavailable)
, 第2
秒發(fā)送6
個(gè)請(qǐng)求, 執(zhí)行brust
中的5
個(gè)請(qǐng)求, 將5
個(gè)請(qǐng)求放入brust
等待響應(yīng), 剩下的1
個(gè)請(qǐng)求返回503(service temporarily unavailable)
。
加brust=5
不加nodelay
的情況下, 有一個(gè)容量為5
的緩沖區(qū),rate=10r/s
每秒只能執(zhí)行10
次請(qǐng)求, 多的放到緩沖區(qū)中, 如果緩沖區(qū)滿(mǎn)了, 就直接返回503
錯(cuò)誤。而緩沖區(qū)在下一個(gè)時(shí)間段會(huì)取出請(qǐng)求進(jìn)行響應(yīng), 如果還有請(qǐng)求進(jìn)來(lái), 則繼續(xù)放緩沖區(qū), 多的就返回503
錯(cuò)誤。
情況 3:limit_req zone=req_zone brust=5 nodelay;
第1
秒發(fā)送10
個(gè)請(qǐng)求, 正常響應(yīng)。
第1
秒發(fā)送13
個(gè)請(qǐng)求,13
個(gè)請(qǐng)求正常響應(yīng)。
第1
秒發(fā)送20
個(gè)請(qǐng)求, 前15
個(gè)請(qǐng)求正常響應(yīng), 后5
個(gè)請(qǐng)求返回503(service temporarily unavailable)
。
第1
秒發(fā)送20
個(gè)請(qǐng)求, 前15
個(gè)請(qǐng)求正常響應(yīng), 后5
個(gè)請(qǐng)求返回503(service temporarily unavailable)
, 第2
秒發(fā)送6
個(gè)請(qǐng)求, 正常響應(yīng)。
加brust=5
和nodelay
的情況下, 有一個(gè)容量為5
的緩沖區(qū),rate=10r/s
每秒能執(zhí)行15
次請(qǐng)求,15=10+5
。多的直接返回503
錯(cuò)誤。
基于 ip 的訪(fǎng)問(wèn)控制
http_
access_module: 基于ip的訪(fǎng)問(wèn)控制, 通過(guò)代理可以繞過(guò)限制, 防君子不防小人。
http_access_module語(yǔ)法 | 范圍 | 說(shuō)明 |
---|---|---|
allow ip地址 | cidr網(wǎng)段 | unix: | all; | http、server、location和limit_except | 允許ip地址、cidr格式的網(wǎng)段、unix套接字或所有來(lái)源訪(fǎng)問(wèn) |
deny ip地址 | cidr網(wǎng)段 | unix: | all; | http、server、location和limit_except | 禁止ip地址、cidr格式的網(wǎng)段、unix套接字或所有來(lái)源訪(fǎng)問(wèn) |
allow和deny會(huì)按照順序, 從上往下, 找到第一個(gè)匹配規(guī)則, 判斷是否允許訪(fǎng)問(wèn), 所以一般把all
放最后
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; }
基于用戶(hù)密碼的訪(fǎng)問(wèn)控制
ht
tp_auth_basic_module: 基于文件匹配用戶(hù)密碼的登錄
http_auth_basic_module語(yǔ)法 | 范圍 | 說(shuō)明 |
---|---|---|
auth_basic 請(qǐng)輸入你的帳號(hào)密碼 | off; | http、server、location和limit_except | 顯示用戶(hù)登錄提示 (有些瀏覽器不顯示提示) |
auth_basic_user_file 存儲(chǔ)帳號(hào)密碼的文件路徑; | http、server、location和limit_except | 從文件中匹配帳號(hào)密碼 |
密碼文件可以通過(guò)htpasswd
生成,htpasswd
需要安裝yum install -y httpd-tools
。
# -c 創(chuàng)建新文件, -b在參數(shù)中直接輸入密碼 $ htpasswd -bc /etc/nginx/conf.d/passwd user1 pw1 adding password for user user1 $ htpasswd -b /etc/nginx/conf.d/passwd user2 pw2 adding password for user user2 $ cat /etc/nginx/conf.d/passwd user1:$apr1$7v/m0.if$2kpm9nvvxbav.jsuvuqr01 user2:$apr1$xmoo4zzy$df76u0gzxbd7.5vxe0use0
關(guān)于“基于Nginx如何實(shí)現(xiàn)訪(fǎng)問(wèn)控制、連接限制”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“基于Nginx如何實(shí)現(xiàn)訪(fǎng)問(wèn)控制、連接限制”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。