限流设置之Nginx篇
question1:为什么用到Nginx,Nginx有什么功能?
1.反向代理(建议先看正向代理,反向代理则是同样你要与对方服务器建立连接,但是,代理服务器和目标服务器在一个LAN下,所以我们需要与代理服务器先建交,再由他获取与目标服务器的交互,好比一个带刀侍卫守护着目标服务器)
- 屏蔽目标服务器的真实地址,相对安全性较好;
- nginx的性能好,便于配置负载均衡和动静分离功能,合理利用服务器资源
- 统一入口,当做负载均衡时,不管目标服务器怎么扩展部署,调用者只访问代理服务器入口即可。
2.负载均衡(Nginx起到代理作用,在把别人发来的请求转给我们内部服务器时,当我们内部服务器为一个集群时,分活的事就叫负载均衡) - RR(轮询):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
负载均衡的核心代码为
upstream test {
server localhost:8080;
server localhost:8081;
}
- 权重(也就是我们来对某一个部署在性能更强的机子上分配更多的活):指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}
- ip_hash:ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}
- fair(第三方需要额外安装nginx-upstream-fair):按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
fair;
server localhost:8080;
server localhost:8081;
}
- url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器
在upstream中加入hash语句,server语句中不能写入weight等其他的参数(第二种权重),hash_method是使用的hash算法
upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}
3.HTTP服务器(包含动静分离):
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。(也就是把一些常用的不变的静态资源放到nginx中,然后动态变化的资源再由我们内部服务器来提供值)
upstream test{
server localhost:8080;
server localhost:8081;
}
server {
listen 80;
server_name localhost;
location / {
root e:wwwroot;
index index.html;
}
# 所有静态请求都由nginx处理,存放目录为html
location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root e:wwwroot;
}
# 所有动态请求都转发给tomcat处理
location ~ .(jsp|do)$ {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root e:wwwroot;
}
}
4.正向代理(比如VPN,我们自己的电脑与VPN服务器(代理服务器)同处一个LAN下,但是你可能访问不了一些网站(与目标服务器建立不了链接),所以你与你VPN服务器建立连接,让它与你访问不了的网站交流)
以及根据http状态码配置指定页面、访问权限控制(将访问IP加入到白名单就可以访问,加入到黑名单就不可以访问)
上图是拒绝指定IP,如果是允许指定IP,可进行如下配置,如下:
location /weatherforecast/ {
proxy_pass http://testloadbalance;
# 这个ip是百度输入ip查看到的,也可以通过nginx日志可以看
allow 223.88.45.26;
}
注:如果在同一location块中同时配置deny和allow,配置在最前面的会覆盖下面的,如下:
location /weatherforecast/ {
proxy_pass http://testloadbalance;
# deny all 放在前面,就所有不能访问,deny all 会覆盖下面配置
#deny all;
allow 223.88.45.26;
# deny all 放在后面,被上面allow进行覆盖
deny all;
}
、适配PC或移动端(本质就是判断请求头中User-Agent,只要匹配到移动端,就去找指定移动页面就行啦。),限流等
question2:用Nginx来限流的主要思路是什么?
通过IP限流(为了削峰,即让服务器稳定),主要通过两个方面:1.限制请求速率(限制每个客户端IP地址在规定时间内能够发起的请求次数)2.限制并发连接数(如果只限制请求速率的话,可能会出现同一个IP的用户,频繁调用对应相对耗时的api,也就是利用api的耗时,来在请求速率的限制下,仍然可以影响服务器稳定)
question3:具体的命令的含义是什么?
- 限制请求速率运用了nginx哪个模块?
- binary命令起到什么作用?
- 限制并发连接数运用了nginx哪个模块?
- 限制请求速率运用到了什么算法?IP以及对应的统计数据放在哪里?
- 为什么存储空间选择10M,大概能存多少IP?

1ngx_http_limit_req_module
2压缩的作用
3ngx_http_limit_conn_module
4漏桶算法,放nginx中,zone=xxx:10M也就是声明了对应的空间
5存储空间需要根据应用用户量,大概10M==160000Ip
引用学习资料来自:
【Java项目亮点第四期:三层限流设计】 https://www.bilibili.com/video/BV1y6421G725/?share_source=copy_web&vd_source=d893458c5ff2a94c6b7cb079e1cfcdb9
http://t.csdnimg.cn/SVj0X
https://zhuanlan.zhihu.com/p/373138496
限流设置之Nginx篇的更多相关文章
- 手撕面试官系列(九):分布式限流面试专题 Nginx+zookeeper
Nginx专题 (面试题+答案领取方式见侧边栏) 1.请解释一下什么是 Nginx?2.请列举 Nginx 的一些特性.3.请列举 Nginx 和 Apache 之间的不同点4.请解释 Nginx 如 ...
- Spring Cloud Alibaba | Sentinel: 服务限流基础篇
目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...
- nginx限流模块(防范DDOS攻击)
Nginx限流模式(防范DDOS攻击) nginx中俩个限流模块: 1.ngx_http_limit_req_module(按请求速率限流) 2.ngx_http_limit_conn_module( ...
- 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此 ...
- 限流(四)nginx接入层限流
一.nginx限流模块 接入层指的是请求流量的入口,我们可以在这里做很多控制,比如:负载均衡,缓存,限流等. nginx中针对限流有两个模块可以处理: 1)ngx_http_limit_req_mod ...
- SpringCloud(8)---zuul权限校验、接口限流
zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...
- 服务接口API限流 Rate Limit
一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...
- java 服务接口API限流 Rate Limit
一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...
- 基于Redis实现分布式应用限流--转
原文地址:https://my.oschina.net/giegie/blog/1525931 摘要: 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限 ...
- 高并发之 API 接口,分布式,防刷限流,如何做?
在开发分布式高并发系统时有三把利器用来保护系统:缓存.降级.限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解 ...
随机推荐
- linux有用的命令
如下是一些在工作中偶尔会用到,每次用的时候都要查一查资料的命令这里总结一下方便今后查阅 0.查看操作系统版本 cat /etc/issue 或 cat /etc/redhat-release 1.后 ...
- java调用百度地图接口输入名称查经度纬度
如何注册ak号请参考https://blog.csdn.net/weixin_42512684/article/details/115843299 package manager.tool; impo ...
- IDEA插件Material Theme UI 激活
介绍 "Material Theme UI" 是一款为 IntelliJ IDEA 提供现代化材料设计主题的插件,通过重新设计IDE的外观,为开发人员带来更加美观.富有活力的用户体 ...
- pmp考试巩固知识点
1.冲刺评审会是需要相关的干系人参加的,在冲刺评审会上干系人可以审查并澄清角色.责任和管理模式2.采购中的争议,往往找合同和SOW,SOW是对需要采购的详细范围的描述,与供应商在可交付成果方面有争议时 ...
- [转帖]10--k8s之数据持久化
https://www.cnblogs.com/caodan01/p/15136217.html 目录 一.emptDir 二.hostPath 三.pv 和 pvc 1.环境准备 2.创建pv 3. ...
- [转帖]关于Nacos默认token.secret.key及server.identity风险说明及解决方案公告
https://nacos.io/zh-cn/blog/announcement-token-secret-key.html 近期Nacos社区收到关于Nacos鉴权功能通过token.secret. ...
- ltp的简单学习
ltp的简单学习 简介 下载地址为: https://github.com/linux-test-project/ltp Linux Test Project is a joint project s ...
- [转帖]diskspd的使用
https://www.cnblogs.com/tcicy/p/10005374.html 参数翻译 可测试目标: file_path 文件abc.file #<physical drive n ...
- [转帖]【redis】redis各稳定版本特性(更新到6.0版本)
1.Redis2.6 Redis2.6在2012年正是发布,经历了17个版本,到2.6.17版本,相对于Redis2.4,主要特性如下: 1)服务端支持Lua脚本. 2)去掉虚拟内存相关功能. 3)放 ...
- Nginx 发布 Docker 运行日志的方法
背景 公司这边想进行容器化负载均衡部署. 脚本很简单, 已经实现了, 但是发现我这边没有ELK也没有LOKI 又不太像切入到容器内部进行 获取日志信息. 所以我这边想了一个别的招来动态刷新日志. 思路 ...