nginx限流配置

2023-02-07  本文已影响0人  随风遣入夜

ngx_http_limit_req_module

ngx_http_limit_req_module模块(0.7.21)可以通过定义的 键值来限制请求处理的频率。特别的,它可以限制来自单个IP地址的请求处理频率。 限制的方法是通过一种“漏桶”的方法——固定每秒处理的请求数,推迟过多的请求处理。


配置示例

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

指令

语法: limit_req zone=name [burst=number] [nodelay];
默认值: —
上下文: http, server, location

解释

设置对应的共享内存限制域和允许被处理的最大请求数阈值。 如果请求的频率超过了限制域配置的值,请求处理会被延迟,所以 所有的请求都是以定义的频率被处理的。 超过频率限制的请求会被延迟,直到被延迟的请求数超过了定义的阈值 这时,这个请求会被终止,并返回503 (Service Temporarily Unavailable) 错误。这个阈值的默认值等于0。 比如这些指令

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
    location /search/ {
        limit_req zone=one burst=5;
    }
limit_req zone=one burst=5 nodelay;

语法: limit_req_log_level info | notice | warn | error;
默认值:
limit_req_log_level error;
上下文: http, server, location

语法: limit_req_zone $variable zone=name:size rate=rate;
默认值: —
上下文: http

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

示例


user  root;
worker_processes  4;

#配置Nginx worker进程最大打开文件数
worker_rlimit_nofile 65535;
events {
    #最大连接数
    worker_connections  65535;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;
    proxy_buffering on;
    proxy_buffer_size 1024k;
    proxy_buffers 16 512k;
    proxy_busy_buffers_size 1024k;
    proxy_temp_file_write_size 1024k;
    client_max_body_size 20m;
    server_names_hash_bucket_size 128;

    #限流主配置 一秒只允许同一个客户端访问两次
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
    
    server {
        listen       80;
        server_name  abc.hhh.com;

        #设置限流限制访问时,返回的状态码
        limit_req_status 429;
        
        location /aaa {
            proxy_pass http://adminserver;
            #设置限流
            limit_req zone=mylimit burst=5 nodelay;
            proxy_connect_timeout 60s;
            proxy_read_timeout 120s;
            proxy_send_timeout 12s;
            proxy_set_header Connection "";
            proxy_http_version 1.1;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

上一篇 下一篇

猜你喜欢

热点阅读