前言:
nginx现在应用越来越广,nginx不仅可以做七层代理,也可以做四层代理,随着业务人数的增多,nginx处理请求的能力也是越来越好,但是后端的请求,对数据库的压力就会增大,所以当用户请求数量过大时,避免对数据库造成毁灭性的影响,只有对nginx进行降级处理。比如限流,或者增加tomcat应用,扩大内存等等,这篇文章主要是讲一些nginx限流的配置参考。
限流主要是看怎么限流,一般是限制访问请求数,不同系统的访问请求数不同,经查资料,可以查看nginx的每秒的请求数,作为参考。
nginx status 需要用到nginx自身的模块with-http_stub_status_module,这个可以用nginx -V来检查模块使用情况(nginx -v只显示nginx版本,而nginx -V 不仅显示版本号,还显示使用的模块)
1. nginx 配置
location /status { stub_status on; access_log off; #allow 127.0.0.1;允许哪个ip可以访问 }
2. nginx -s reload 重启nginx
浏览器输入:http://localhost/status
Active connections: 649 server accepts handled requests 76085213 76085213 218901053 Reading: 0 Writing: 59 Waiting: 590
第1列:当前与http建立的连接数,包括等待的客户端连接:649
第2列:
接受的客户端连接总数目:76085213
处理的客户端连接总数目:76085213
客户端总的请求数目:218901053
第3列:
当前,nginx读请求连接
当前,nginx写响应返回给客户端
目前有多少空闲客户端请求连接
注:红色部分是要特别注意的情况数目,你刷新页面,可以看到这个数值请求情况,这个数值就是nginx总的请求数,你每秒刷新一次,能大概算出每秒的请求数量
3,配置限流
限流分两种,一种是限制ip的的并发请求数,一种是限制每秒请求处理数
1)限制ip的并发请求数:
ngx_http_limit_conn_module 模块 这个模块依赖realIp模块取到的真实ip
一般nginx会放置到架构的最前端,相当于是请求先到nginx,nginx直接反向代理到具体的tomcat,这种情况下realip模块可以获取到客户端最真实的ip
另一种是http请求先请求到F5机器,然后分发到nginx,最后nginx再反向代理到具体的tomcat服务器
这种情况下,nginx获取到的ip其实是F5的ip,不是客户端的真实ip
2)限制每秒请求处理数:
ngx_http_limit_req_module 模块,这个模块也依赖于realIp模块取到的真实ip
模块原理实现的漏斗算法,200r/s,是最后的一个平均的效果,逐步平滑。
算法介绍:https://baike.baidu.com/item/leaky%20bucket/5639070
将下面代码配置到http模块中
proxy_intercept_errors on;
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=200r/s;
limit_conn_status 503; #超出限制时,返回状态码
location模块中增加 limit_req zone=mylimit nodelay;
burst默认等于0
• nodelay 对burst中的请求不再采取延时处理的做法,而是立刻处理。
中200代表的就是每秒的请求数量,这个值参考的就是status中的请求数量
注意:限流方案配置后,会出现,已经登录的用户,再次发送请求的时候,会出现503错误,最好跟业务沟通之后再上限流方案。
相关推荐
本专题将深入探讨Nginx与Zookeeper结合实现的分布式限流策略,帮助理解如何在面试中有效地展示这方面的知识。 1. **Nginx**:Nginx是一款高性能的HTTP和反向代理服务器,广泛用于负载均衡、缓存和安全防护等场景。...
nginx限流
例如,Nginx的`limit_req`模块可以实现基于滑动窗口的平均速率限流,通过设置`rate`参数来限制每秒请求数。此外,还可以通过`zone`定义共享内存区,存储每个IP地址的请求计数,实现IP级别的限流。Nginx还支持突发...
本文将深入探讨如何在Nginx和Tomcat这两个常见的Web服务器上实现限流。 首先,我们关注Nginx。Nginx以其高效的反向代理和负载均衡能力而闻名,同时也提供了内置的限流模块。通过修改`nginx.conf`配置文件,我们可以...
Nginx 限流配置 Nginx 限流配置是指通过 Nginx 服务器对用户的访问进行限制,以避免服务器受到攻击或过载。这种配置可以防止恶意用户对服务器的攻击,保护服务器的安全和性能。 限流配置 在 Nginx 配置文件中,...
以下是一个基于Redis的分布式限流实现,利用了Redis的数据结构——有序集合(Sorted Set)来创建令牌桶算法的一个变体: ```java public class RedisRateLimiter { private static final String BUCKET = "BUCKET...
centos下nginx实现按国家/地域封禁、按ip频率限流能力、ngx_http_geoip2_module、ngx_http_geoip_module的区分,docker部署,基于最新版1.21 nginx。ngx_http_geoip2_module 支持指定字段来进行ip解析,而ngx_...
Nginx 提供了内置的限流模块 `limit_req`,使得我们可以轻松地实现读写限流。下面我们将详细介绍 Nginx 如何通过 `limit_req` 模块实现这一功能。 ### 1. 限流原理 `limit_req` 模块基于令牌桶算法(Token Bucket ...
**Nginx 教程:防御DDoS、用户访问控制与限流** Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于Web服务领域,以其高效、稳定和灵活的配置而闻名。本教程将围绕如何利用Nginx进行DDoS防御、用户访问控制以及...
Nginx的限流机制是基于漏桶算法实现的,其核心思想是通过队列缓存暂时无法处理的请求,然后以固定的速率依次处理这些请求,以此来平滑流量,防止流量峰值导致的系统过载。 在配置Nginx限流时,还应注意阅读官方文档...
rk3399移植 nginx +rtmp实现流媒体服务器,实现rk3399推送网络视频流(rtmp、https),使用时在根目录下新建/home/build 文件夹,解压后进入/home/build/build/conf,打开nginx.conf 添加rtmp配置(网上很多根据自己...
FFmpeg、nginx、rtmp三者结合可以实现一个强大且高效的流媒体服务器,下面是它们的详细介绍和搭建过程。 FFmpeg FFmpeg是一款功能强大的开源命令行工具,能够处理视频和音频文件。它可以用于视频和音频的编解码、...
一步步安装nginx搭建流媒体服务器的所有软件打包; nginx-1.8.0.tar.gz :应用服务器主程序 nginx_mod_h264_streaming-2.2.7.tar.gz :MP4流媒体支持模块。 openssl-1.0.1c.tar.gz :openssl库 pcre-7.9.tar.gz :...
6. **URL重写**:Nginx提供了强大的URL重写规则,可以对用户请求的URL进行转换,优化SEO,或实现动态URL与静态内容的匹配。 7. **限速限制**:Nginx可以通过设置限速策略,限制单个IP或所有用户的访问速度,防止...
本文将深入探讨`Nginx`如何利用`RTMP`和`HLS`协议实现视频流分发,并重点关注在`Win32`环境下设置`Nginx`视频直播服务器的方法。 首先,让我们了解`Nginx`的基本概念。`Nginx`是一个高性能、高并发的HTTP和反向代理...
**Nginx限流方案详解** 在面对高并发流量或者恶意攻击时,系统保护成为了一个重要的议题。Nginx作为一款高性能的HTTP和反向代理服务器,提供了多种限流策略来确保系统的稳定性和安全性。本文将详细介绍Nginx实现限...