nginx(3)之反向代理、限速

反向代理

原理

1、客户机在发起请求时,不会直接发送给目的主机,而是先发送给代理服务器;

2、代理服务器接收客户机请求后,再向业务服务器发出请求;

3、业务服务器 接收请求、处理请求 最后 响应请求;

3、代理服务器接收业务主机返回的数据;

4、代理服务器响应客户端请求;

5、客户端通过浏览器渲染请求并展示给用户。

正向代理

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

  1. 访问原来无法访问的资源,如google;
  2.  可以做缓存,加速访问资源;
  3. 对客户端访问授权,上网进行认证;
  4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息;
应用场景

1、堡垒机应用:业务服务器只接收来自堡垒机的链接访问(例如:代理服务器的Ip或特定端口),其他的都拒绝。

 

2、发布内网服务器:

 

 3、缓存应用:将静态数据缓存起来,提高用户体验。根据28法则,缓存服务器处理80%的数据,业务服务器处理20%的数据。

 代码实现
客户端 win7  http://192.168.244.128
反代  nginx  ip128
业务机器  https://www.cnblogs.com/fqh202 or http://101.37.225.65/

在客户机输入 http://192.168.244.128,反代服务器向 http://101.37.225.65/ 请求数据并返回:

server {
    listen  80;
    server_name  www.abc.com;
    charset utf8;
    location / {
        proxy_pass http://101.37.225.65:80;
    }
}

测试:

 

限速

限制单位时间内的最大连接数:限制某个用户在一个给定的时间段内能够产生HTTP请求的数,最典型的就是12306网站,由于购票需要会不断刷新页面,进而产生大量请求(而淘宝天猫双十一不会不断刷新页面),最终会导致当机,所以必须限制单位时间内的最大连接数。

安全目的,例如 暴力破解密码。

通过限制进来的请求速率,并且结合日志标记目标urls来帮助防范DDOS攻击。

什么是DDOS 攻击

它在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。

DDOS 里面的 DOS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前门,他从后门进来;你关了后门,他从窗口跳起来。

参考:http://www.ruanyifeng.com/blog/2018/06/ddos.html

应用场景

1、DDOS防御

2、下载场景保护

原理和算法思想

(请求)从上方倒入水桶,从水桶下方流出(被处理);

来不及流出的水存在水桶中(缓存),以固定的速率流出;

水桶满后水溢出(丢弃)。

这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。

实现方式

Nginx主要有两种限速方式:按连接数限速(ngx_http_limit_conn_module)、按请求速率限速(ngx_http_limit_req_module)

按连接数限速

按连接数限速是指限制单个IP(或者其他的key)同时发起的连接数,超出这个限制后,Nginx将直接拒绝更多的连接。

配置:

limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;  # 每秒处理1个请求
server {
    listen       80;
    charset utf8;
    location / {
        root   html;
        index  index.html index.htm;
    }
    location /abc {
        limit_req zone=addr burst=5 nodelay;
    }
}

第一段配置

第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址;

第二个参数:zone=addr:10m表示生成一个大小为10M,名字为addr的内存区域,用来存储访问的频次信息;

第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的;

第二段配置

第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应;

第二个参数:burst=5这个配置的意思是设置一个大小为5的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内;

第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队

按请求速率限速

按请求速率限速是指限制单个IP(或者其他的key)发送请求的速率,超出指定速率后,Nginx将直接拒绝更多的请求。采用leaky bucket算法实现。

limit_conn_zone $binary_remote_addr zone=iozone:10m;
server {
    listen       80;
    charset utf8;
    location / {
        root   html;
        index  index.html index.htm;
    }
    location /cde {
        limit_conn iozone 1;
        limit_rate 100k;  # 最大下载速率
    }
}

$binary_remote_addr是限制同一客户端ip地址

$server是限制同一server最大并发数

limit_conn为限制并发连接数,nginx 1.18以后用limit_conn_zone替换了limit_conn

限速前:

 

限速后:

 

转载于:https://www.cnblogs.com/fqh202/p/9998804.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值