Nginx抢购限流配置实现解析

 更新时间:2019年08月12日 17:13:27   作者:rong341233  
这篇文章主要介绍了Nginx抢购限流配置实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

因业务需求经常会有抢购业务,因此需要在负载均衡前端进行限流错误。本文同样也适用于防止CC.

  limit_req_zone $server_name zone=sname:10m rate=1r/s;        #限制服务器每秒只能有一次访问成功
    #limit_req_zone $binary_remote_addr zone=one:3m rate=1r/s;    #限制IP,每秒只能访问一次
    #limit_req_zone $binary_remote_addr $uri zone=two:3m rate=1r/s;  #限制IP和路径不带参数,
    #limit_req_zone $binary_remote_addr $request_uri zone=thre:3m rate=1r/s;  #限制IP和带参数的路径 

  server {
    listen    80;
    server_name www.abc.com;
    location / {
        include host/proxy.cnf;
        proxy_pass http://backend;
    }
    location /api/createOrder {
        limit_req zone=sname;  #不带突发,只能有一次正常请求
        limit_req_status 503;    #设置返回的状态码是503
        #limit_req zone=sname burst=5 nodelay;  #最大并发是5,并且实时处理
        include host/proxy.cnf;
        proxy_pass http://backend;
        error_page 503 =200 /50x.html;   #这里很重要,可以将错误的状态码503,返回结果的时候是200
    }
    location = /50x.html {
        if ($http_user_agent ~* "mobile|android|iPhone|iphone|ios|iOS"){
            #default_type application/json;
            return 200 '{"msg": "活动过于火爆,请稍后重试!","data": {},"code": -1}';  #设置移动端返回错误的信息显示
        }
        root  html;   #如果是PC端返回一个HTML页面
    }
    }

重点: 正常情况下,如果设置了限流,返回是503的状态码,这对于移动端来说即便是你返回JSON数据但是客户端时不认的,这个时候巧妙的通过 error_page 403 =200 /50x.html;将状态码设置为200

以上只是使用了ngx_limit_req_module,同时也可以使用ngx_limit_conn_module模块。

以上参考: https://gist.github.com/simlegate/75b18359316cc33d8e20

特别是一些咨询类网站如果备爬虫盯上,服务器可能会被爬虫给干死(小网站就是这样)
那么怎么办呢,我们可以使用变量去做

#全局配置
limit_req_zone $spider zone=spider:60m rate=200r/m;  #限制爬虫每分钟只能跑200次
#某个server中
limit_req zone=spider burst=5 nodelay;
if ($http_user_agent ~* “spider|bot”) {
  set $spider $http_user_agent;   #设置变量,进入这里的就进行限速
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Nginx http资源请求限制(三种方法)

    详解Nginx http资源请求限制(三种方法)

    这篇文章主要介绍了Nginx http资源请求限制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 深入理解nginx的access.log文件

    深入理解nginx的access.log文件

    NGINX软件会把每个用户访问网站的日志记录到指定的日志文件里,供网站者分析用户的浏览行为,本文主要介绍了nginx的access.log文件,感兴趣的可以了解一下
    2023-09-09
  • nacos集群搭建Nginx负载均衡的操作详解

    nacos集群搭建Nginx负载均衡的操作详解

    这篇文章主要介绍了nacos集群搭建Nginx负载均衡的详细操作,文中通过代码示例和图文介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Windows下用Nginx代理Django安装配置实例

    Windows下用Nginx代理Django安装配置实例

    这篇文章主要介绍了Windows下用Nginx代理Django安装配置实例,本文讲解了安装djanjo、用djanjo生成简单web页面、用nginx进行代理等内容,需要的朋友可以参考下
    2015-03-03
  • Nginx使用if指令实现多个proxy_pass方式

    Nginx使用if指令实现多个proxy_pass方式

    这篇文章主要介绍了Nginx使用if指令实现多个proxy_pass方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • nginx 80端口配置多个location无效访问404问题

    nginx 80端口配置多个location无效访问404问题

    这篇文章主要介绍了nginx 80端口配置多个location无效访问404问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Nginx配合Apache或Tomcat的动静分离基本配置实例

    Nginx配合Apache或Tomcat的动静分离基本配置实例

    这篇文章主要介绍了Nginx配合Apache或Tomcat的动静分离基本配置实例,实际上Nginx专门负责静态和反向代理是主流服务器配置方案,需要的朋友可以参考下
    2016-01-01
  • Nginx之QPS限制模块的具体使用

    Nginx之QPS限制模块的具体使用

    本文主要介绍了Nginx之QPS限制模块的具体使用,主要介绍Nginx QPS限制模块的原理、安装和使用方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Nginx实现动静分离的示例代码

    Nginx实现动静分离的示例代码

    这篇文章主要介绍了Nginx实现动静分离的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 使用Nginx创建临时和永久重定向的具体示例

    使用Nginx创建临时和永久重定向的具体示例

    HTTP 重定向 是将一个域名或地址指向另一个的方法,有几种不同类型的重定向,每种对客户端浏览器意味着不同的事情,最常见的两种类型是临时重定向和永久重定向,本文给大家介绍了使用Nginx创建临时和永久重定向的具体示例,需要的朋友可以参考下
    2024-07-07

最新评论