Nginx限制某個IP同一時間段的訪問次數(shù)和請求數(shù)示例代碼
nginx可以通過ngx_http_limit_conn_module和ngx_http_limit_req_module配置來限制ip在同一時間段的訪問次數(shù).
ngx_http_limit_conn_module:該模塊用于限制每個定義的密鑰的連接數(shù),特別是單個IP地址的連接數(shù).使用limit_conn_zone和limit_conn指令.
ngx_http_limit_req_module:用于限制每一個定義的密鑰的請求的處理速率,特別是從一個單一的IP地址的請求的處理速率。使用“泄漏桶”方法進(jìn)行限制.指令:limit_req_zone和limit_req.
ngx_http_limit_conn_module:限制單個IP的連接數(shù)示例:
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
#定義一個名為addr的limit_req_zone用來存儲session,大小是10M內(nèi)存,
#以$binary_remote_addr 為key,
#nginx 1.18以后用limit_conn_zone替換了limit_conn,
#且只能放在http{}代碼段.
...
server {
...
location /download/ {
limit_conn addr 1; #連接數(shù)限制
#設(shè)置給定鍵值的共享內(nèi)存區(qū)域和允許的最大連接數(shù)。超出此限制時,服務(wù)器將返回503(服務(wù)臨時不可用)錯誤.
?。H绻麉^(qū)域存儲空間不足,服務(wù)器將返回503(服務(wù)臨時不可用)錯誤
}
可能有幾個limit_conn指令,以下配置將限制每個客戶端IP與服務(wù)器的連接數(shù),同時限制與虛擬服務(wù)器的總連接數(shù):
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m
...
server {
...
limit_conn perip 10; #單個客戶端ip與服務(wù)器的連接數(shù).
limit_conn perserver 100; #限制與服務(wù)器的總連接數(shù)
}
參考文檔:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
ngx_http_limit_req_module:限制某一時間內(nèi),單一IP的請求數(shù).
示例:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
#定義一個名為one的limit_req_zone用來存儲session,大小是10M內(nèi)存,
#以$binary_remote_addr 為key,限制平均每秒的請求為1個,
#1M能存儲16000個狀態(tài),rete的值必須為整數(shù),
server {
...
location /search/ {
limit_req zone=one burst=5;
#限制每ip每秒不超過1個請求,漏桶數(shù)burst為5,也就是隊列.
#nodelay,如果不設(shè)置該選項(xiàng),嚴(yán)格使用平均速率限制請求數(shù),超過的請求被延時處理.
#舉個栗子:
?。TO(shè)置rate=20r/s每秒請求數(shù)為20個,漏桶數(shù)burst為5個,
#brust的意思就是,如果第1秒、2,3,4秒請求為19個,第5秒的請求為25個是被允許的,可以理解為20+5
#但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤.
?。H绻麉^(qū)域存儲空間不足,服務(wù)器將返回503(服務(wù)臨時不可用)錯誤
?。K俾试诿棵胝埱笾兄付ǎ╮/s)。如果需要每秒少于一個請求的速率,則以每分鐘的請求(r/m)指定?!?
}
還可以限制來自單個IP地址的請求的處理速率,同時限制虛擬服務(wù)器的請求處理速率:
http {
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
...
server {
...
limit_req zone=perip burst=5 nodelay; #漏桶數(shù)為5個.也就是隊列數(shù).nodelay:不啟用延遲.
limit_req zone=perserver burst=10; #限制nginx的處理速率為每秒10個
}
總結(jié)
以上所述是小編給大家介紹的Nginx限制某個IP同一時間段的訪問次數(shù)和請求數(shù)示例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
基于nginx實(shí)現(xiàn)上游服務(wù)器動態(tài)自動上下線無需reload的實(shí)現(xiàn)方法
這篇文章主要介紹了基于nginx實(shí)現(xiàn)上游服務(wù)器動態(tài)自動上下線無需reload,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Nginx實(shí)現(xiàn)http自動跳轉(zhuǎn)到https
本文主要介紹了Nginx實(shí)現(xiàn)http自動跳轉(zhuǎn)到https,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
ubuntu中如何使用nginx監(jiān)聽80端口進(jìn)行轉(zhuǎn)發(fā)
這篇文章主要介紹了ubuntu中如何使用nginx監(jiān)聽80端口進(jìn)行轉(zhuǎn)發(fā)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
配置解決Nginx服務(wù)器中WordPress路徑不自動加斜杠問題
這篇文章主要介紹了配置解決Nginx服務(wù)器中WordPress路徑不自動加斜杠問題,nginx不會自動在請求的最后加上一個斜線的問題文中也有提到通用的規(guī)則改寫方法,需要的朋友可以參考下2016-01-01

