nginx 限流

map $http_x_forwarded_for  $clientRealIp {

        ## 没有通过代理,直接用 remote_addr

    ""    $remote_addr;  

        ## 用正则匹配,从 x_forwarded_for 中取得用户的原始IP

        ## 例如   X-Forwarded-For: 202.123.123.11,208.22.22.234, 192.168.2.100,...

        ## 这里第一个 202.123.123.11 是用户的真实 IP,后面其它都是经过的 CDN 服务器

    ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;

}

 

## 通过 map 指令,我们为 nginx 创建了一个变量 $clientRealIp ,这个就是 原始用户的真实 IP 地址,

## 不论用户是直接访问,还是通过一串CDN 之后的访问,我们都能取得正确的原始IP地址

 

 

## 这里取得原始用户的IP地址

map $http_x_forwarded_for  $clientRealIp {

    ""    $remote_addr;

    ~^(?P<firstAddr>[0-9\.]+),?.*$    $firstAddr;

}

 

## 针对原始用户 IP 地址做限制

limit_conn_zone $clientRealIp zone=TotalConnLimitZone:20m;

limit_conn  TotalConnLimitZone  50;

limit_conn_log_level notice;

 

## 针对原始用户 IP 地址做限制

limit_req_zone $clientRealIpzone=ConnLimitZone:20m  rate=10r/s;

#limit_req zone=ConnLimitZone burst=10 nodelay;

limit_req_log_level notice;

 

## 具体服务器配置

server {

    listen   80;

    location ~ \.php$ {

                ##最多 5 个排队, 由于每秒处理10 个请求 + 5个排队,你一秒最多发送 15 个请求过来,再多就直接返回 503 错误给你了

        limit_reqzone=ConnLimitZone burst=5 nodelay;

 

        fastcgi_pass  127.0.0.1:9000;

        fastcgi_index  index.php;

        include    fastcgi_params;

    }    

 

}




b)limit_reqzone=one burst=10 nodelay

i.添加nodelay配置,这样就是根据你的网络状况访问,一分钟访问够10次后,服务器直接返回503。

ii.Eg:imit_req_zone$binary_remote_addrzone=one:100m rate=10r/m;

就是每分钟有10个令牌供用户使用,按照b的配置情况,就会根据网络情况访问url,如果一分钟超过10个令牌,服务器返回503,等待下一个一分钟领取访问令牌。

http{

map $http_x_forwarded_for $clientRealIp {

 ""$remote_addr;

 ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr;

  }

 limit_req_status 599;

  limit_req_zone$clientRealIp zone=allips:70m rate=20r/s;

limit_req_log_level notice;

}

Server {

Location / {

limit_req zone=allips burst=5 nodelay;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宝塔面板是一款开源的服务器管理面板,通过宝塔可以轻松管理服务器上的各种资源及服务。而nginx则是一款高性能的Web服务器,通过nginx可以有效地提升网站的性能。在建立一个高流量的网站或者服务时,往往需要对访问量进行限制来保证服务器的稳定性,而nginx有着丰富的限流配置功能,可以通过宝塔面板上的配合来实现。 要实现nginx限流功能,主要是通过nginx里面的limit_req模块来完成。宝塔面板上的nginx限流功能主要是针对limit_req模块进行配置的。其具体配置方式是在宝塔面板上找到网站设置,在配置选项中选择nginx高级配置,然后在location中添加limit_req配置即可。这里需要简单介绍一下nginx limit_req模块的参数配置:limit_req_zone、limit_req等。其中limit_req_zone参数 mainly是配置一些基本变量,用于nginx来记录请求的状态。此外,还通过limit_req参数来控制请求速度,该参数可包括limit_req_zone、rate和burst等。 总体来说,宝塔nginx限流操作相对简单,只需要按照上述步骤进行一些简单配置,即可实现对服务器的流量进行限制。但需要注意的是,具体的限流配置应该根据实际的情况进行调整,这样才能实现最佳的限流效果。另外,在限流时,还要注意用户的访问体验,适度限制,以免出现过度限制的情况,将用户严重的限制在界外。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值