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

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

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

1.場景描述

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

2.nginx限流

nginx提供了兩種限流方案:

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

3.控制速率

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

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

概述:漏桶算法思想就是水(請求)滴入漏桶漏桶里,漏桶以一定速率出水(響應(yīng)速率),當(dāng)水滴入的速率過大時會溢出漏桶(訪問速率大于響應(yī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 :表示能存儲的訪問IP的地址,1M能存儲16000ip地址的訪問信息,10M可以存儲16W IP地址訪問信息
  • 3.rate用于設(shè)置最大訪問速率,rate=2r/s 表示每秒能處理2個請求,也就是每500毫秒處理一次請求,若1s內(nèi)再有請求就會被拒絕
  • 4.location /:攔截的請求,表示location下所有的請求

3.2突發(fā)性限流

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

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

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

但是會造成請求的等待時間過長,為了解決這個問題,可以加關(guān)鍵字 nodelay,就會一次性的處理這些請求如

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

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

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

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

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

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

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

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

具體步驟:

  • 1.添加依賴
  • 2.在啟動類中定義方法返回對象 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 #請求數(shù)限流 名字不能隨便寫
              args:
                key-resolver: "#{@ipKeyResolver}"
                redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速率
                redis-rate-limiter.burstCapacity: 1 #令牌桶總?cè)萘?/pre>

步驟總結(jié)

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

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

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

相關(guān)文章

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

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

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

    使用systemctl方式管理nginx方式

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

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

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

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

    這篇文章主要介紹了用Nginx禁止指定IP、國外IP訪問我的網(wǎng)站,想要實現(xiàn)這個功能方法有很多種,這里基于 Nginx 的 ngx_http_geoip2 模塊來禁止國外 IP 訪問網(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)境部署教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • nginx刷新頁面出現(xiàn)404解決方案(親測有效)

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

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

    nginx反向代理時如何保持長連接

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

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

    這篇文章主要介紹了Nginx大并發(fā)優(yōu)化實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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)的實戰(zhàn)指南

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

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

最新評論

河池市| 屏东县| 丰县| 汉阴县| 寻甸| 东海县| 巴里| 抚顺县| 敦化市| 保德县| 松阳县| 通河县| 尼勒克县| 济南市| 韶关市| 楚雄市| 新疆| 三穗县| 宁强县| 新和县| 凉山| 政和县| 丁青县| 张家界市| 集贤县| 兴义市| 宁津县| 新建县| 蒙阴县| 太仓市| 武城县| 昌图县| 谢通门县| 洛扎县| 张北县| 荆州市| 彭水| 平和县| 同德县| 鄂伦春自治旗| 平陆县|