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:具体的命令的含义是什么?

  1. 限制请求速率运用了nginx哪个模块?
  2. binary命令起到什么作用?
  3. 限制并发连接数运用了nginx哪个模块?
  4. 限制请求速率运用到了什么算法?IP以及对应的统计数据放在哪里?
  5. 为什么存储空间选择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篇的更多相关文章

  1. 手撕面试官系列(九):分布式限流面试专题 Nginx+zookeeper

    Nginx专题 (面试题+答案领取方式见侧边栏) 1.请解释一下什么是 Nginx?2.请列举 Nginx 的一些特性.3.请列举 Nginx 和 Apache 之间的不同点4.请解释 Nginx 如 ...

  2. Spring Cloud Alibaba | Sentinel: 服务限流基础篇

    目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...

  3. nginx限流模块(防范DDOS攻击)

    Nginx限流模式(防范DDOS攻击) nginx中俩个限流模块: 1.ngx_http_limit_req_module(按请求速率限流) 2.ngx_http_limit_conn_module( ...

  4. 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流

    接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用. 举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此 ...

  5. 限流(四)nginx接入层限流

    一.nginx限流模块 接入层指的是请求流量的入口,我们可以在这里做很多控制,比如:负载均衡,缓存,限流等. nginx中针对限流有两个模块可以处理: 1)ngx_http_limit_req_mod ...

  6. SpringCloud(8)---zuul权限校验、接口限流

    zuul权限校验.接口限流 一.权限校验搭建 正常项目开发时,权限校验可以考虑JWT和springSecurity结合进行权限校验,这个后期会总结,这里做个基于ZuulFilter过滤器进行一个简单的 ...

  7. 服务接口API限流 Rate Limit

    一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...

  8. java 服务接口API限流 Rate Limit

    一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...

  9. 基于Redis实现分布式应用限流--转

    原文地址:https://my.oschina.net/giegie/blog/1525931 摘要: 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限 ...

  10. 高并发之 API 接口,分布式,防刷限流,如何做?

    在开发分布式高并发系统时有三把利器用来保护系统:缓存.降级.限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解 ...

随机推荐

  1. 图扑 HT for Web 风格属性手册教程

    图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎.HT for Web(以下简称 HT)图元的样式由其 Style 属性控制,并且不同类型图元的 ...

  2. 拥抱开放,Serverless 时代的下一征程

    Serverless 作为云计算的最佳实践和未来演进趋势,其全托管免运维的使用体验和按量付费的成本优势使得它在云原生时代备受推崇.Serverless 的使用场景也由事件驱动,数据处理等部分特定场景转 ...

  3. 02-UPF-Power Domain

    How do we use power domain 使用UPF至少有一个power domain power domain可以进行嵌套 Defining Power Domain Example P ...

  4. win11不改时区,安装 android 子系统,运行android app

    win11开启虚拟机平台 下载安卓子系统 打开https://store.rg-adguard.net , 在URL中输入:https://www.microsoft.com/store/produc ...

  5. [转帖]一图胜千言 -- SQL Server 基准测试

    https://blog.51cto.com/ultrasql/2130487 文章标签基准测试文章分类SQL Server数据库阅读数1116  

  6. [转帖]OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]

    classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle  ...

  7. [转帖]Linux系统NVME盘分区和挂载

    https://www.jianshu.com/p/04327f1b97cb 查看系统里面识别到的硬盘和分区的信息 $ sudo fdisk -l Disk /dev/nvme1n1: 1.8 TiB ...

  8. [转帖]在KingbaseES数据库中批量创建数据库/表

    1. 问题 如何在KingbaseES中批量创建表和库? 2. 通过shell脚本文件实现 有时候我们在进行测试的时候需要进行批量的建库以及建表,这时我们可以使用shell脚本实现或者是SQL实现,s ...

  9. [转帖]redis集群报错CROSSSLOT Keys in request don‘t hash to the same slot

    先上结果: $redis->sDiffStore('live_room:robots:data:' . $info['id'], 'user_info:robots_list', ''); 上述 ...

  10. [转帖]Centos 7 查看磁盘io ,找出占用io读写很高的进程

    1,先用iostat查看磁盘io 是否读写负载很高 用iostat -x 1 10 如果 iostat 没有,要 yum install sysstat安装这个包,第一眼看下图红色圈圈的那个如果%ut ...