详解Nginx限流配置

下面是详解Nginx限流配置的攻略。在本攻略中,我们将会涉及到两个示例,分别是基于Token bucket算法实现的限流和基于Lua脚本实现的限流。

1. Token bucket限流算法

Token bucket算法是常见的一种限流算法,其原理是在一段时间内(例如1秒),先把一定数量的令牌放到桶里,每当请求到来时,就从桶里取一个令牌,如果取不到令牌,则请求被拒绝。

Nginx可以通过ngx_http_limit_req_module模块实现Token bucket限流算法,以下是一个示例:

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

    server {
        location / {
            limit_req zone=one burst=5;
            ...
        }
    }
}

上述配置中,limit_req_zone用于定义一个限流区域,$binary_remote_addr表示客户端的IP地址;zone=one表示限流区域的名称,10m表示限流区域的大小,rate=1r/s表示限流速率为1次/s。在上述配置中,我们定义了一个名为one的限流区域,其大小为10m,速率为1次/s。

接下来,在location块中使用limit_req指令限制请求的次数和速率。burst参数表示在短时间内可以允许的请求数量,如果超过这个数量,则请求被拒绝。例如,上述配置中burst=5表示允许在1秒内的短时间内最多处理5个请求。

2. 基于Lua的限流

除了Token bucket算法以外,还可以使用Lua脚本实现自定义的限流逻辑。以下是一个基于Lua实现的限流示例:

http {
    lua_shared_dict limit 10m;

    server {
        location / {
            access_by_lua_block {
                local limit = ngx.shared.limit
                local key = ngx.var.binary_remote_addr
                local reqs, err = limit:get(key)
                if not reqs then
                    limit:set(key, 1, 1)
                elseif reqs < 10 then
                    limit:incr(key, 1)
                else
                    ngx.exit(503)
                end
            }
            ...
        }
    }
}

上述配置中,我们首先定义了一个名为limit的共享内存区域,大小为10m。接下来,在location块中使用access_by_lua_block指令执行Lua脚本。

在Lua脚本中,我们首先获取名为limit的共享内存区域,并根据客户端的IP地址生成一个key。接着,我们通过ngx.shared.limit:get(key)获取当前IP对应的请求数量,如果获取不到则说明该IP第一次请求,此时我们设置请求数量为1,时间为1秒。如果获取到了请求数量,则使用ngx.shared.limit:incr(key, 1)递增该IP的请求数量,如果请求数量超过10,就直接返回503,表示请求过多,限流。

以上就是Nginx限流的两个示例,可以根据实际需要选择合适的方案。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Nginx限流配置 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • nginx 做反向代理的时候不加载静态资源

    鉴于自己的技术凿实很菜,就在网上浏览技术大牛的博客边学边操作,最近发现一件事是就是我在我的百度云服务器上使用nginx的时候没有办法加载静态资源,网上搜了一些,发现挺简单的就是在nginx.conf文件中配置: server { listen 85; server_name server; location /{ proxy_pass_header Serv…

    Nginx 2023年4月10日
    00
  • nginx+keepalived+tomcat+memcache负载均衡搭建小集群

    最近一段时间一直在研究高可用高并发负载均衡分布式集群等技术,先前发布了lvs基于网络第四次协议搭建的小集群,现在用空刚好搭建了一个基于nginx搭建的小集群。 我准备了四台机器,情况如下 机器名称 机器IP 安装软件 角色 虚拟ip 描述 vmm01 192.168.252.11 Nginx、keepalived Nginx主机 192.168.252.20…

    Nginx 2023年4月11日
    00
  • 非root用户启动nginx

    非root用户启动nginx 背景: 公司服务器申请root权限一般会比较麻烦。所以希望能以公共账号(普通用户)来启动nginx,方便后续运维。 nginx启动进程可以在/etc/nginx/nginx.conf中,指定user (user www-data), 但是这个只有在root用户启动的情况才有意义,启动之后,master process还是root…

    Nginx 2023年4月16日
    00
  • 2.3 Nginx服务的启停控制

    在Linux平台下,控制Nginx服务的启停有多种方法 2.3.1 Nginx服务的信号控制   在Nginx服务的启停办法中,有一类是通过信号机制来实现的,Nginx服务器的信号控制如下:   Nginx服务在运行时,会保持一个主进程和一个或多个 worker process 工作进程。通过给Nginx服务的主进程发送信号就可以控制服务的启停了。   获取…

    Nginx 2023年4月11日
    00
  • 对nginx-naxsi白名单规则详解

    关于“对nginx-naxsi白名单规则详解”的攻略,我将会分为以下几个部分来进行讲解: 什么是nginx-naxsi白名单规则 如何配置nginx-naxsi白名单规则 示例说明 1. 什么是nginx-naxsi白名单规则 nginx-naxsi是nginx的一个安全模块,它可以帮助防止常见的Web攻击,例如SQL注入、XSS和请求嗅探等。而naxsi白…

    Nginx 2023年5月16日
    00
  • nginx连接php测试

    1 nginx连接php [root@web01 /application/nginx/conf/conf.d]# cat docs.conf server { server_name docs.oldboy.com; listen 80; root /code; index index.php index.html; location / { } loca…

    Nginx 2023年4月10日
    00
  • windows系统安装配置nginx环境

    下面是Windows系统安装配置nginx环境的完整攻略: 一、安装nginx 1.下载nginx 到nginx官网的下载页面(http://nginx.org/en/download.html)下载Windows版本的nginx。 2.解压nginx压缩包 将下载的nginx压缩包解压到一个路径下,如:C:\nginx 3.启动nginx 在C:\ngin…

    Nginx 2023年5月16日
    00
  • Nginx实现https和跳转功能

    一、Nginx-HTTPS #安装nginx时,需要将 –with-http_ssl_module模块开启1.首先生成密钥和证书文件 #创建证书存放目录 mkdir /usr/local/nginx/conf/ssl/ #在刚才创建的目录中建立服务器私钥,RSA密钥 openssl genrsa -out ccku.key 1024 #生成csr文件;依次…

    Nginx 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部