Nginx限制某個(gè)IP同一時(shí)間段的訪問次數(shù)和請求數(shù)示例代碼
nginx可以通過ngx_http_limit_conn_module
和ngx_http_limit_req_module
配置來限制ip在同一時(shí)間段的訪問次數(shù).
ngx_http_limit_conn_module:該模塊用于限制每個(gè)定義的密鑰的連接數(shù),特別是單個(gè)IP地址的連接數(shù).使用limit_conn_zone和limit_conn指令.
ngx_http_limit_req_module:用于限制每一個(gè)定義的密鑰的請求的處理速率,特別是從一個(gè)單一的IP地址的請求的處理速率。使用“泄漏桶”方法進(jìn)行限制.指令:limit_req_zone和limit_req.
ngx_http_limit_conn_module:限制單個(gè)IP的連接數(shù)示例:
http { limit_conn_zone $binary_remote_addr zone=addr:10m; #定義一個(gè)名為addr的limit_req_zone用來存儲(chǔ)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ù)。超出此限制時(shí),服務(wù)器將返回503(服務(wù)臨時(shí)不可用)錯(cuò)誤. #如果區(qū)域存儲(chǔ)空間不足,服務(wù)器將返回503(服務(wù)臨時(shí)不可用)錯(cuò)誤 }
可能有幾個(gè)limit_conn指令,以下配置將限制每個(gè)客戶端IP與服務(wù)器的連接數(shù),同時(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; #單個(gè)客戶端ip與服務(wù)器的連接數(shù). limit_conn perserver 100; ?。O拗婆c服務(wù)器的總連接數(shù) }
參考文檔:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
ngx_http_limit_req_module:限制某一時(shí)間內(nèi),單一IP的請求數(shù).
示例:
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... #定義一個(gè)名為one的limit_req_zone用來存儲(chǔ)session,大小是10M內(nèi)存, #以$binary_remote_addr 為key,限制平均每秒的請求為1個(gè), #1M能存儲(chǔ)16000個(gè)狀態(tài),rete的值必須為整數(shù), server { ... location /search/ { limit_req zone=one burst=5; #限制每ip每秒不超過1個(gè)請求,漏桶數(shù)burst為5,也就是隊(duì)列. #nodelay,如果不設(shè)置該選項(xiàng),嚴(yán)格使用平均速率限制請求數(shù),超過的請求被延時(shí)處理. #舉個(gè)栗子: #設(shè)置rate=20r/s每秒請求數(shù)為20個(gè),漏桶數(shù)burst為5個(gè), #brust的意思就是,如果第1秒、2,3,4秒請求為19個(gè),第5秒的請求為25個(gè)是被允許的,可以理解為20+5 #但是如果你第1秒就25個(gè)請求,第2秒超過20的請求返回503錯(cuò)誤. ?。H绻麉^(qū)域存儲(chǔ)空間不足,服務(wù)器將返回503(服務(wù)臨時(shí)不可用)錯(cuò)誤 #速率在每秒請求中指定(r/s)。如果需要每秒少于一個(gè)請求的速率,則以每分鐘的請求(r/m)指定。 }
還可以限制來自單個(gè)IP地址的請求的處理速率,同時(shí)限制虛擬服務(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個(gè).也就是隊(duì)列數(shù).nodelay:不啟用延遲. limit_req zone=perserver burst=10; #限制nginx的處理速率為每秒10個(gè) }
總結(jié)
以上所述是小編給大家介紹的Nginx限制某個(gè)IP同一時(shí)間段的訪問次數(shù)和請求數(shù)示例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
nginx搭建圖片服務(wù)器的過程詳解(root和alias的區(qū)別)
這篇文章主要介紹了nginx搭建圖片服務(wù)器(root和alias的區(qū)別)的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Nginx實(shí)現(xiàn)UDP四層轉(zhuǎn)發(fā)的過程
為了解決VPN連接速度慢的問題,可以通過Nginx實(shí)現(xiàn)UDP的四層轉(zhuǎn)發(fā),首先檢查Nginx是否安裝了with-stream模塊,然后修改nginx.conf配置文件進(jìn)行UDP端口的轉(zhuǎn)發(fā)設(shè)置,使用nginx-t檢查配置文件語法,無誤后重新加載Nginx,這樣通過國內(nèi)服務(wù)器中轉(zhuǎn),可以提升連接到國外服務(wù)器的速率2024-09-09總結(jié)高并發(fā)下Nginx性能如何優(yōu)化
這篇文章主要為大家介紹了在高并發(fā)下Nginx性能如何優(yōu)化的總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10nginx代理多次302的解決方法(nginx Follow 302)
這篇文章主要介紹了nginx代理多次302的解決方法(nginx Follow 302),詳細(xì)的介紹了解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12