欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nginx的限流和網(wǎng)關(guān)gatway限流詳解

 更新時(shí)間:2024年08月13日 17:10:42   作者:咕嚕咕嚕da  
這篇文章主要介紹了nginx的限流和網(wǎng)關(guān)gatway限流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.場(chǎng)景描述

例如網(wǎng)站首頁采取二級(jí)緩存操作,減少對(duì)數(shù)據(jù)庫(kù)和redis的壓力,但是遇到惡意請(qǐng)求還是不能有效的緩解壓力,限流就能起到保護(hù)措施的作用了

2.nginx限流

nginx提供了兩種限流方案:

  • 控制請(qǐng)求速率
  • 控制并發(fā)連接數(shù)

3.控制速率

nginx常用控制速率的方式之一就是采用漏桶算法

3.1漏桶算法實(shí)現(xiàn)控制速率限流

概述:漏桶算法思想就是水(請(qǐng)求)滴入漏桶漏桶里,漏桶以一定速率出水(響應(yīng)速率),當(dāng)水滴入的速率過大時(shí)會(huì)溢出漏桶(訪問速率大于響應(yīng)速率),然后就拒絕請(qǐng)求,漏桶算法能強(qiáng)轉(zhuǎn)限制數(shù)據(jù)的傳輸速率

配置示例

在nginx的nginx.conf配置文件

http{
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s;
...
	server{
		...
			location / {
			  limit_req zone=myRateLimit; burst=5; 
			 }
		 }
	}
}

具體配置示例

修改/usr/local/openresty/nginx/conf/nginx.conf:

#user nobody; 
user root root; 
worker_processes 1;
 #error_log logs/error.log; 
 #error_log logs/error.log notice; 
 #error_log logs/error.log info;
 #pid logs/nginx.pid; 
 events { 
 	worker_connections 1024; 
 }
 http {
 include mime.types; 
 default_type application/octet‐stream; 
 #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 logs/access.log main; sendfile on; 
 #tcp_nopush on; #keepalive_timeout 0; 
 keepalive_timeout 65; 
 #gzip on; 
 limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s; 
 server { 
 	listen 8081;
 	server_name localhost; 
 	charset utf‐8; 
 	location / { 
 		limit_req zone=myRateLimit; 
 		root html; 
 		index index.html index.htm; 
 	} 
	} 
}

需要關(guān)注以下配置

limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=2r/s; 
server { 
	listen 8081;
	server_name localhost; 
	charset utf‐8; 
	location / { 
	limit_req zone=myRateLimit; 
	root html; 
	index index.html index.htm; 
	} 
} 
}

說明:

  • 1.binary_remote_addr 是一種key,表示基于 remote_addr(客戶端IP) 來做限流
  • 2.zone=myRateLimit:10m :表示能存儲(chǔ)的訪問IP的地址,1M能存儲(chǔ)16000ip地址的訪問信息,10M可以存儲(chǔ)16W IP地址訪問信息
  • 3.rate用于設(shè)置最大訪問速率,rate=2r/s 表示每秒能處理2個(gè)請(qǐng)求,也就是每500毫秒處理一次請(qǐng)求,若1s內(nèi)再有請(qǐng)求就會(huì)被拒絕
  • 4.location /:攔截的請(qǐng)求,表示location下所有的請(qǐng)求

3.2突發(fā)性限流

場(chǎng)景:當(dāng)正常流量突然增大,超出的請(qǐng)求將被拒絕,無法處理突發(fā)流量,可以結(jié)合burst參數(shù)

server { 
location / {
 limit_req zone=myRateLimit burst=5; 
 root html; 
 index index.html index.htm; 
 } 
 }

burst: 會(huì)將超出的5個(gè)請(qǐng)求放入隊(duì)列中,按照處理速率處理,會(huì)一個(gè)個(gè)進(jìn)行處理.

但是會(huì)造成請(qǐng)求的等待時(shí)間過長(zhǎng),為了解決這個(gè)問題,可以加關(guān)鍵字 nodelay,就會(huì)一次性的處理這些請(qǐng)求如

server { 
location / {
 limit_req zone=myRateLimit burst=5  nodelay; 
 root html; 
 index index.html index.htm; 
 } 
 }

nginx實(shí)現(xiàn)限流的總結(jié)

nginx限流采用的算法是漏桶算法,水滴入到漏桶中,再按一定速率流出,當(dāng)?shù)稳氲乃俾蚀笥诹鞒龅乃俾剩蜁?huì)水溢出,也就是請(qǐng)求速率大于處理速率的時(shí)候就會(huì)拒絕請(qǐng)求。

具體的做法是 在nginx.conf文件中 配置rate 處理速率,配置漏桶能存儲(chǔ)的最大存儲(chǔ)量,1m能存儲(chǔ)16000個(gè)IP地址的訪問信息 

burst: nodelay 能處理突發(fā)性請(qǐng)求

網(wǎng)關(guān)gatway實(shí)現(xiàn)限流

使用場(chǎng)景:限制客戶端訪問服務(wù)端微服務(wù)的流量

gatway是采用令牌桶算法實(shí)現(xiàn)限流的,配置加入令牌的速率,和令牌桶能放入的最大令牌數(shù)量,只有請(qǐng)求獲得了令牌才能訪問,沒有獲得令牌就會(huì)拒絕訪問,令牌桶算法是基于redis實(shí)現(xiàn)的,默認(rèn)使用redis的RateLimter限流算法實(shí)現(xiàn)的

具體步驟:

  • 1.添加依賴
  • 2.在啟動(dòng)類中定義方法返回對(duì)象 KeyResolver
@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }

    /**
     * 通過KeyResolver來指定限流的Key
     * @return
     */
    @Bean
    public KeyResolver ipKeyResolver() {
        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
            }
        };
    }
}
  • 3.在配置中聲明令牌產(chǎn)生的速率,令牌桶的大小
 filters:
            - StripPrefix= 1
            - name: RequestRateLimiter #請(qǐng)求數(shù)限流 名字不能隨便寫
              args:
                key-resolver: "#{@ipKeyResolver}"
                redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速率
                redis-rate-limiter.burstCapacity: 1 #令牌桶總?cè)萘?/pre>

步驟總結(jié)

首先引入依賴,在springboot啟動(dòng)類中,指定限流的限流指標(biāo),通過@Bean交由IOC管理,例如聲明一個(gè)ipKeyResolver,以ip作為限流的指標(biāo)。

在配置文件中,配置令牌桶每秒填充的速率和令牌桶總?cè)萘?,限流的指?biāo)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法

    nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法

    這篇文章主要介紹了nginx出現(xiàn)500 Internal Server Error錯(cuò)誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • nginx去掉前端配置的路徑前綴兩種情況

    nginx去掉前端配置的路徑前綴兩種情況

    今天接到一個(gè)配置nginx的需求是,需要訪問某個(gè)域名時(shí),nginx可以去掉前綴去代理訪問到后端,這篇文章主要給大家介紹了關(guān)于nginx去掉前端配置的路徑前綴的兩種情況,需要的朋友可以參考下
    2024-05-05
  • Nginx的搭建與核心配置方法

    Nginx的搭建與核心配置方法

    Nginx是一個(gè)高性能的反向代理和 Web服務(wù)器軟件,最初是由俄羅斯人 Igor Sysoev開發(fā)的,其源代碼基于雙條款BSD許可證發(fā)布,因其系統(tǒng)資源消耗低、運(yùn)行穩(wěn)定且具有高性能的并發(fā)處理能力等特性,這篇文章主要介紹了Nginx的搭建與核心配置,需要的朋友可以參考下
    2024-06-06
  • 永中文檔在線轉(zhuǎn)換預(yù)覽基于nginx配置部署方案

    永中文檔在線轉(zhuǎn)換預(yù)覽基于nginx配置部署方案

    這篇文章主要為大家介紹了永中文檔在線轉(zhuǎn)換預(yù)覽基于nginx配置部署方案的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 分布式限流之Nginx層限流方式

    分布式限流之Nginx層限流方式

    這篇文章主要介紹了分布式限流之Nginx層限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 前端必備的一些nginx知識(shí)點(diǎn)匯總

    前端必備的一些nginx知識(shí)點(diǎn)匯總

    Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),下面這篇文章主要給大家匯總介紹了關(guān)于前端必備的一些nginx知識(shí)點(diǎn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 詳解Nginx 被動(dòng)檢查服務(wù)器的存活狀態(tài)

    詳解Nginx 被動(dòng)檢查服務(wù)器的存活狀態(tài)

    Nginx 可以持續(xù)測(cè)試您的上游服務(wù)器,避免出現(xiàn)故障的服務(wù)器,并將恢復(fù)的服務(wù)器優(yōu)雅地添加到負(fù)載均衡組中。這篇文章主要介紹了Nginx 被動(dòng)檢查服務(wù)器的存活狀態(tài),需要的朋友可以參考下
    2021-10-10
  • 通過Nginx實(shí)現(xiàn)前端與后端的協(xié)同部署

    通過Nginx實(shí)現(xiàn)前端與后端的協(xié)同部署

    在現(xiàn)代 web 開發(fā)中,前端與后端的協(xié)同部署是一個(gè)關(guān)鍵問題,一個(gè)高效的部署策略不僅能提升用戶體驗(yàn),還能簡(jiǎn)化開發(fā)流程,今天,我們就來探討如何利用 Nginx 實(shí)現(xiàn)前端與后端的協(xié)同部署,需要的朋友可以參考下
    2025-03-03
  • Nginx工作模式及代理配置的使用細(xì)節(jié)

    Nginx工作模式及代理配置的使用細(xì)節(jié)

    這篇文章主要為大家介紹了Nginx工作模式及代理配置的使用細(xì)節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • nginx 平滑重啟的實(shí)現(xiàn)方法

    nginx 平滑重啟的實(shí)現(xiàn)方法

    這篇文章主要介紹了nginx 平滑重啟的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論