在10.0.0.200上运行wget客户端程序,在10.0.0.199上运行squid代理服务器程序。客户端通过代理服务器的中转,获取Internet上的主机www.baidu.com的首页index.html。
因此,由上图可见,wget客户端程序和代理服务器之间,以及代理服务器与web服务器之间都是使用HTTP协议通信的。HTTP协议是一种应用层协议,它默认使用的是传输层协议是TCP协议。
为了将10.0.0.199设置为10.0.0.200的HTTP代理服务器,我们需要在10.0.0.199上设置环境变量如下:
其中3128是squid服务器默认使用的端口号,可以使用lsof命令查看服务器程序监听的端口号)。设置好环境变量之后,10.0.0.200访问任何Internet上的Web服务器时,其HTTP请求都将首先发送至10.0.0.199的3128端口。
squid代理服务器接受到wget客户端的HTTP请求之后,将简单地修改这个请求,然后把它发送给最终的目标Web服务器。既然代理服务器访问的是Internet上的机器,可以预见它发送的IP数据报都将经过路由器的中转。
在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,他们提供对目标资源的中转访问。一个HTTP请求可被多个代理服务器转发,后面的服务器称为前面服务器的上有服务器。代理服务器按照其使用方式和作用,分为:
正向代理要求客户端自己设置代理服务器的地址。客户端的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。比如处于防火墙内的局域网机器要访问Internet,或者要访问一下被屏蔽掉的国外网站,就需要使用正向代理服务器。
反向代理则被设置在服务器端,因而客户端无需进行任何设置。反向代理是指代理服务器接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。这种情况下,代理服务器对外就表现为一个真实的服务器。各大网站通常分区域设置了多个代理服务器,所以在不同的地方ping同一个域名可能得到不同的IP地址,因为这些IP地址实际上是代理服务器的IP地址。
透明代理只能设置在网关上,用户访问Internert的数据报必然都经过网关,如果在网关上设置代理,则该代理对用户来说显然是透明的。透明代理可以看作正向代理的一种特殊情况。
下面是在10.0.0.199上部署squid代理服务器的过程:
sudo apt update
sudo apt install squid
sudo vim /etc/squid/squid.conf
搜索 acl CONNECT ..., 然后如图修改
然后搜索 http_access allow,如图修改:
sudo service squid restart
可以看到,我们显示连接了代理服务器,然后下载的到了index.html。