反向代理
原理
1、客户机在发起请求时,不会直接发送给目的主机,而是先发送给代理服务器;
2、代理服务器接收客户机请求后,再向业务服务器发出请求;
3、业务服务器 接收请求、处理请求 最后 响应请求;
3、代理服务器接收业务主机返回的数据;
4、代理服务器响应客户端请求;
5、客户端通过浏览器渲染请求并展示给用户。
正向代理
正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途:
- 访问原来无法访问的资源,如google;
- 可以做缓存,加速访问资源;
- 对客户端访问授权,上网进行认证;
- 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息;
应用场景
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
限速前:
限速后: