在web服务器上配置虚拟主机并设置redirect参数,由于ProxyPassServer只有在出现302转发是才能体现出它与ProxyPass不同。为了模拟局域网环境,我们使用防火墙策略禁用客户端的访问。
结果分析
上面搭建好了代理服务器,接下来配合是elinks与tcpdump以及wireshark我们来做实验分析(这里主要是验证ProxyPassServer的作用,ProxyPass原理简单,这里不做实验证明)。
测试1:我们不开启ProxyPassServer选项,只使用ProxyPass选项。如下图
[root@linuxidc ~]#cat /etc/httpd/conf.d/test.conf
<VirtualHost *:80>
ProxyPass "/" "http://172.18.254.54/"
#ProxyPassReverse "/" " # 注释掉
</VirtualHost>
在客户端上使用elinks访问代理服务器。
[root@linuxidc ~]#elinks
由于没有ProxyPassServer选项,所以我们访问资源失败,出现下图提示。
测试2:开启ProxyPassServer选项,我么先在Agent上开启tcpdump进行抓包
[root@linuxidc ~]# tcpdump tcp -i ens33 -w ./target.cap # -w 表示将结果存储起来,方便wireshark进行分析
在客户端上使用elinks进行访问,为了验证ProxyPassServer的功能我们访问两次。由于使用了ProxyPassServer功能,所以我们能看到重定向的文件内容。
然后我们分析一下抓到的数据包。
从上面的数据包信息可知当我们第一次访问index.html.txt时,由于index.html.txt重定向到了inde2.html,所以代理服务器在返回结果是,不是返回给客户端一个重定向后的资源(),这个资源对客户端是不能访问的,此时ProxyPassServer的作用就起作用了,代理服务器在返回该资源时,直接又去访问了重定向之后的资源,然后在返回给客户端数据。也验证了上文中提到的ProxyPassServer的工作原理。
本篇总结
记得第一次看到这个两个参数的时候,也是一脸茫然,经过简单的实验发现,有没有ProxyPassServer参数都能访问成功,后来查找了许多资料,发现如果出现重定向(301、302)资源的情况下(目前我只发现这种时候会有区别,是不是唯一,我不敢说),客户端在去访问资源便不可以。于是亲手实验,发现果然如此,当添加ProxyPassServer参数后,访问重定向资源也能顺利访问了。由于实验需要很多的测试,一会儿在这台机器,一会儿在另外一台主机上,文章中为了能让大家能够很好的理解,有些小细节就省略了。实验步骤太多,所以绞尽脑汁也没有完美的描述出实验过程,望读者见谅。