nginx限制访问速度

本文介绍了如何使用Nginx的HttpLimitReqModule和HttpLimitZoneModule模块来限制IP访问频率和并发连接数的方法,包括限制请求速率、连接数及带宽等。同时提供了具体的配置示例,并分享了解决特定场景下限制问题的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://siwei.me/blog/posts/nginx-ip

nginx 限制某个ip的访问频率,以及访问速率。

2015-09-12 13:28

访问量: 4129

分类: 技术

HttpLimitReqModul 限制某一段时间内同一ip访问数实例

http{
    ...
    #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
    #以$binary_remote_addr 为key,限制平均每秒的请求为20个,
    #1M能存储16000个状态,rete的值必须为整数,
    #如果限制两秒钟一个请求,可以设置成30r/m
    limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; ... server{ ... location { ... #限制每ip每秒不超过20个请求,漏桶数burst为5 #brust的意思就是,如果第1秒、2,3,4秒请求为19个, #第5秒的请求为25个是被允许的。 #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。 #nodelay,如果不设置该选项,严格使用平均速率限制请求数, #第1秒25个请求时,5个请求放到第2秒执行, #设置nodelay,25个请求将在第1秒执行。 limit_req zone=allips burst=5 nodelay; ... } ... } ... } 

(测试不通过) HttpLimitZoneModule 限制并发连接数实例 limit_zone只能定义在http作用域,limit_conn可以定义在http server location作用域

http{
    ...
    #定义一个名为one的limit_zone,大小10M内存来存储session,
    #以$binary_remote_addr 为key
    #nginx 1.18以后用limit_conn_zone替换了limit_conn
    #且只能放在http作用域
    limit_conn_zone   one  $binary_remote_addr 10m; ... server{ ... location { ... limit_conn one 20; #连接数限制 #带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k limit_rate 500k; ... } ... } ... } 

每个IP 允许最多10个连接, 每个连接1MB

Inside your server block configuration:

limit_rate 128K; limit_zone one $binary_remote_addr 10m;

Inside your location block configuration:

limit_conn one 10;

In this example, it would allow 10 connections per IP with 1 Mbit each.

如果仅仅是 限制某个req的速度:

limit_rate 50k;

 

 

nginx限制黑白名单

 

前言:

  今天,公司主站突然出现IDE创建应用没反应的问题,经过预发布环境、非代理环境下面的服务测试,均没有问题,定位问题出现在前端。而我们前端有两层代理,一是青松抗D系统,一是我们自己的nginx代理系统。通过web页面测试发现控制台曝出下面的错误:

503 Service Temporarily Unavailable 那么可以断定的确是nginx这一层出现了问题。想想以前的nginx的配置修改及青松系统的接入,找到如下原因:

  1. nginx设置单个IP的访问次数:

    limit_req_zone $binary_remote_addr zone=allips:10m rate=100r/m   #单位时间每分钟内,当且仅当允许同一个IP过来的请求次数为100次。

  2. 查询nginx日志,发现大量的请求IP地址来源为223.202.31.220,该地址为青松在我公司机房部署的私有节点服务器地址。

  所以问题是这样,所有的请求通过223.202.31.220到达后端nginx,然后被当成来自同一个IP地址的请求,以至于返回了503的错误信息。

 

解决办法:

   通过上述分析,定位到问题所在,那么就需要一个解决办法。其实思路是很明确的,把青松抗D私有节点服务器地址加入到nginx的白名单策略中。有两种办法,简单介绍如下:

  1.利用nginx的white_black_list_conf模块:

    参考链接:http://www.ttlsa.com/nginx/nginx-module-ngx_white_black_list/

  2.利用nginx的geo、map命令:

    参考链接:http://www.ttlsa.com/nginx/nginx-speed-white-list-configuration/

 

参考:

http://tengine.taobao.org/document_cn/http_limit_req_cn.html

http://www.cnblogs.com/songqingbo/p/5578485.html

转载于:https://www.cnblogs.com/fyy-hhzzj/p/7845058.html

### 提升宝塔面板中 Nginx 服务器访问速度的方法 #### 开启 Gzip 压缩 为了提高网站的访问速度,可以启用Gzip压缩功能。这会减少传输的数据量从而加快网页加载时间[^1]。 ```bash # 宝塔面板操作指南中的具体步骤可参照相关文档说明来完成此设置。 ``` #### 启用 FastCGI 缓存机制 利用Nginx内置的`fastcgi_cache`组件能够有效地缓存动态页面内容,不仅提升了响应效率还减轻了服务器的工作负担[^2]。 #### 使用 Brotli 替代传统 gzip 进行更高效的压缩处理 相较于传统的gzip算法,Brotli提供了更好的压缩比率,尽管其计算成本较高但是随着现代硬件性能的增长变得越来越受欢迎。要实现这一点需先获取并编译安装来自Google官方仓库提供的ngx_brotli扩展包[^3]: ```bash cd /www/server && git clone https://github.com/google/ngx_brotli.git \ && cd ngx_brotli && git submodule update --init ``` 之后按照提示重新构建部署新的带有Brotli支持版本的Nginx服务端程序(建议事先做好数据备份工作以防万一). #### 自定义优化 NGINX 主配置文件 对于追求极致性能表现的应用场景来说,在主nginx配置文件路径下的特定PHP版本关联conf文件里调整参数也是一种常见做法;例如修改php-fpm进程数、最大连接限制等选项均有助于改善整体效能水平[^4]: ```nginx location ~ \.php$ { include enable-php-72.conf; } ``` #### 设置合理的日志记录策略 适当精简不必要的HTTP请求日志条目同样有利于增强系统的吞吐能力。通过指定不同的log_format格式化模板以及控制access_log开关状态等方式达到目的[^5]。 ```nginx http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { location / { access_log off; # 关闭该位置的日志记录 } location /specific/path/ { access_log /path/to/log/file.log main buffer=8k flush=1m; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值