找到nginx.conf

Nginx 的限流主要是两种方式:限制访问频率和限制并发连接数。
Nginx 按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。
Nginx 官方版本限制 IP 的连接和并发分别有两个模块:
1、limit_req_zone:用来限制单位时间内的请求数,即速率限制 , 采用的漏桶算法 “leaky bucket”。
2、limit_conn_zone:用来限制同一时间连接数,即并发限制。

http { # 定义限流策略 limit_req_zone $binary_remote_addr zone=rateLimit:10m rate=1r/s ; # 搜索服务的虚拟主机 server { location / { # 使用限流策略,burst=5,重点说明一下这个配置,burst 爆发的意思,这个配置的意思是设置一个大小为 5 的缓冲区(队列)当有大量请求(爆发)过来时, # 超过了访问频次限制的请求可以先放到这个缓冲区内。nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回 503,如果没有设置,则所 # 有请求会等待排队。 limit_req zone=rateLimit burst=5 nodelay;proxy_pass http://train-manager-search ; } } }

limit_conn_zone
使用语法:limit_conn_zone key zone
key :定义限流对象,binary_remote_addr 是一种 key,表示基于 remote_addr(客户端 IP) 来做限流,binary_ 的目的是压缩内存占用量。
zone:定义共享内存区来存储访问信息, myRateLimit:10m 表示一个大小为 10M,名字为 myRateLimit 的内存区域。1M 能存储 16000 IP 地址的
访问信息,10M 可以存储 16W IP 地址访问信息。

http { # 定义限流策略 limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; # 搜索服务的虚拟主机 server { location / { # 对应的 key 是 $binary_remote_addr,表示限制单个 IP 同时最多能持有 1 个连接。 limit_conn perip 1; # 对应的 key 是 $server_name,表示虚拟主机(server) 同时能处理并发连接的总数。注意,只有当 request header 被后端 server 处理后,这个连接才进行计数。 limit_conn perserver 10 ; proxy_pass http://train-manager-search ; } } }

配置自定义限流返回状态码提示

        #error_page   500 502 503 504  /50x.html;        #503限流返回默认值        error_page 503 = /503;        location /503 {            default_type application.json;            add_header Content-Type 'application/json; charset-utf-8';            return 200 '{"code":0,"data":{},"msg":"service busy"}';        }