目录
一、Nginx的负载均衡
负载均衡(Load Balance) ,英文名称为Load Balance,其含义就是指将工作任务进行平衡、分摊到多个操作单元上进行运行,从而协同完成工作任务。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
1、nginx的负载均衡算法
a. 轮询(默认)
每个请求按照时间顺序逐一分配到笔筒的后端
b. weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况下
c. ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session保持的问题。
d. url_hash
可以依据页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求。
e. least_conn
根据连接数分配。
f. fair (第三方)
根据响应时间分配。
二、实验环境
1、实验架构
为了方便解释,我们只用两个节点,启动之后,看到有 3 个容器(你想像成有 3 台服务器)。
Node1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,我们在外部是没法直接访问到的。
2、环境搭建
systemctl start docker //启动docker
docker-compose build //建立环境
问题:
使用yum安装docker-compose时提示没有这个包
可以使用以下命令安装
更新yum源
sudo yum -y install epel-release
然后可以直接安装
yum install docker-compose
上传文件并压缩
加载环境
docker compose up -d
我们查看它的compose文件可以看到:
nginx的80端口被映射到主机的18080端口之上,访问http://192.168.2.169:18080
就可以访问到我们的web服务了。Node1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,我们在外部是没法直接访问到的。
查看
docker ps -a 查看所有进程,端口号为18080
3、复现
文件/etc/nginx/conf.d/default.conf如下:
浏览器访问
连接测试
三、 webshell的绕过
在 PHP 5 中 assert() 是一个函数,我们可以通过$f='assert';$f(...);这样的方法来动态执行任意代码,此时它可以起到替代 eval() 的作用。但是在 PHP 7 中,assert() 不再是函数了,而是变成了一个和 eval() 一样的语言结构,此时便和 eval() 一样不能再作为函数名动态执行代码,所以利用起来稍微复杂一点。
1、异或操作
例:
<?php
echo "A"^"`";
?>
输出结果:
因为代码中对字符"A"和字符"`"进行了异或操作。在PHP中,两个变量进行异或时,先会将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完,又将结果从二进制转换成了ASCII值,再将ASCII值转换成字符串。异或操作有时也被用来交换两个变量的值。
2、取反运算绕过
该方法和前面的方法绕过的方法有异曲同工之妙,唯一差异就是,这里使用的是位运算里的 “取反” 运算。利用的是 UTF-8 编码的某个汉字,将其中某个字符取出来,比如'和'{2}的结果是"\x8c",其再取反即可得到字母s:
echo ~('瞰'{1}); // a
echo ~('和'{2}); // s
echo ~('和'{2}); // s
echo ~('的'{1}); // e
echo ~('半'{1}); // r
echo ~('始'{2}); // t
运行结果如下: