最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)站首頁(yè)采取二級(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)水滴入的速率過(guò)大時(shí)會(huì)溢出漏桶(訪問(wèn)速率大于響應(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; 
	} 
} 
}

說(shuō)明:

  • 1.binary_remote_addr 是一種key,表示基于 remote_addr(客戶端IP) 來(lái)做限流
  • 2.zone=myRateLimit:10m :表示能存儲(chǔ)的訪問(wèn)IP的地址,1M能存儲(chǔ)16000ip地址的訪問(wèn)信息,10M可以存儲(chǔ)16W IP地址訪問(wèn)信息
  • 3.rate用于設(shè)置最大訪問(wèn)速率,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)求將被拒絕,無(wú)法處理突發(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í)間過(guò)長(zhǎng),為了解決這個(gè)問(wèn)題,可以加關(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地址的訪問(wèn)信息 

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

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

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

gatway是采用令牌桶算法實(shí)現(xiàn)限流的,配置加入令牌的速率,和令牌桶能放入的最大令牌數(shù)量,只有請(qǐng)求獲得了令牌才能訪問(wèn),沒有獲得令牌就會(huì)拒絕訪問(wèn),令牌桶算法是基于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);
    }

    /**
     * 通過(guò)KeyResolver來(lái)指定限流的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),通過(guò)@Bean交由IOC管理,例如聲明一個(gè)ipKeyResolver,以ip作為限流的指標(biāo)。

在配置文件中,配置令牌桶每秒填充的速率和令牌桶總?cè)萘浚蘖鞯闹笜?biāo)。

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

相關(guān)文章

  • Nginx配置前端http緩存的實(shí)現(xiàn)

    Nginx配置前端http緩存的實(shí)現(xiàn)

    本文介紹了使用Nginx配置前端HTTP緩存,通過(guò)合理配置緩存策略,可以有效地提升前端資源的加載速度,減少服務(wù)器負(fù)載,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • 使用systemctl方式管理nginx方式

    使用systemctl方式管理nginx方式

    這篇文章主要介紹了使用systemctl方式管理nginx方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • 詳解如何設(shè)置Nginx實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射

    詳解如何設(shè)置Nginx實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射

    在 Nginx 中實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射是一種常見的做法,本文詳細(xì)介紹如何設(shè)置 Nginx 實(shí)現(xiàn)內(nèi)外網(wǎng)端口映射,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 基于Nginx禁止指定IP、國(guó)外IP訪問(wèn)我的網(wǎng)站

    基于Nginx禁止指定IP、國(guó)外IP訪問(wèn)我的網(wǎng)站

    這篇文章主要介紹了用Nginx禁止指定IP、國(guó)外IP訪問(wèn)我的網(wǎng)站,想要實(shí)現(xiàn)這個(gè)功能方法有很多種,這里基于 Nginx 的 ngx_http_geoip2 模塊來(lái)禁止國(guó)外 IP 訪問(wèn)網(wǎng)站,需要的朋友可以參考下
    2022-05-05
  • Web技術(shù)與Nginx網(wǎng)站環(huán)境部署教程

    Web技術(shù)與Nginx網(wǎng)站環(huán)境部署教程

    這篇文章主要介紹了Web技術(shù)與Nginx網(wǎng)站環(huán)境部署教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • nginx刷新頁(yè)面出現(xiàn)404解決方案(親測(cè)有效)

    nginx刷新頁(yè)面出現(xiàn)404解決方案(親測(cè)有效)

    本文主要介紹了nginx刷新頁(yè)面出現(xiàn)404解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • nginx反向代理時(shí)如何保持長(zhǎng)連接

    nginx反向代理時(shí)如何保持長(zhǎng)連接

    如果我們使用了nginx去作為反向代理或者負(fù)載均衡,從客戶端過(guò)來(lái)的長(zhǎng)連接請(qǐng)求就會(huì)被轉(zhuǎn)換成短連接發(fā)送給服務(wù)器端。為了支持長(zhǎng)連接,我們需要在nginx服務(wù)器上做一些配置。
    2020-10-10
  • Nginx大并發(fā)優(yōu)化實(shí)戰(zhàn)

    Nginx大并發(fā)優(yōu)化實(shí)戰(zhàn)

    這篇文章主要介紹了Nginx大并發(fā)優(yōu)化實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解Nginx + Tomcat 反向代理 負(fù)載均衡 集群 部署指南

    詳解Nginx + Tomcat 反向代理 負(fù)載均衡 集群 部署指南

    Nginx是一種服務(wù)器軟件,也是一種高性能的http和反向代理服務(wù)器,本篇文章主要介紹了Nginx + Tomcat 反向代理 負(fù)載均衡 集群 部署指南,有興趣的可以了解一下。
    2016-12-12
  • Nginx配置文件提權(quán)的實(shí)戰(zhàn)指南

    Nginx配置文件提權(quán)的實(shí)戰(zhàn)指南

    在現(xiàn)代 Linux 系統(tǒng)中,nginx 通常作為 Web 服務(wù)的核心組件運(yùn)行,其支持的模塊化配置、靈活的路徑設(shè)置以及多樣的文件解析能力,本文結(jié)合一次真實(shí)場(chǎng)景,給大家介紹如何通過(guò)配置文件完成提權(quán)操作進(jìn)行深入剖析,需要的朋友可以參考下
    2025-09-09

最新評(píng)論

三穗县| 如东县| 双峰县| 禹城市| 林口县| 宿迁市| 三穗县| 嘉鱼县| 从江县| 沛县| 阿勒泰市| 和顺县| 朝阳县| 乐平市| 芮城县| 汉源县| 广元市| 平遥县| 永顺县| 屏南县| 澜沧| 剑阁县| 阿拉善盟| 英超| 依兰县| 满洲里市| 方山县| 若羌县| 潜山县| 静海县| 芮城县| 温泉县| 墨脱县| 乌鲁木齐市| 祁连县| 乌兰县| 四川省| 麦盖提县| 岗巴县| 图木舒克市| 龙里县|