代理缓存服务之Squid
代理缓存服务
Squid是linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。
简单来说,Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。
当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。
在使用Squid服务程序为用户提供缓存代理服务时,具有正向代理模式和反向代理模式之分。
正向代理模式:让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为标准代理模式与透明代理模式。 标准正向代理模式:把网站数据缓存到服务器本地,提高数据资源被再次访问时的效率,但是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号信息,否则默认不使用代理服务。 透明正向代理模式:作用与标准正向代理模式基本相同,区别是用户不需要手动指定代理服务器的IP地址与端口号,所以这种代理服务对于用户来讲是相对透明的。 反向代理模式:让多台节点主机反向缓存网站数据,从而加快用户访问速度。
正向代理服务的拓扑图:
反向代理服务的拓扑图:
配置Squid服务程序:
准备两台虚拟机,一台用作Squid服务器,另外一台用作Squid客户端。
Squid服务器和客户端的操作系统和IP地址信息:
主机名称 | 操作系统 | IP地址 |
Squid服务器 | RHEL 7 | 外网:dhcp获取 内网:192.168.10.10 |
Squid客户端 | RHEL 7 | 内网:192.168.10.20 |
这样一来,我们就有了一台既能访问内网,又能访问外网的虚拟机了。一会儿需要把Squid服务程序部署在这台虚拟机上,然后让另外一台原本只能访问内网的虚拟机(即Squid客户端)通过Squid服务器进行代理上网,从而使得Squid客户端也能访问外部 网站。
安装squid服务:
[root@zhangjh ~]# yum install squid
常用的Squid服务程序配置参数以及作用:
参数 | 作用 |
http_port 3128 | 监听的端口号 |
cache_mem 64M | 内存缓冲区的大小 |
cache_dir ufs /var/spool/squid 2000 16 256 | 硬盘缓冲区的大小 |
cache_effective_user squid | 设置缓存的有效用户 |
cache_effective_group squid | 设置缓存的有效用户组 |
dns_nameservers IP地址 | 一般不设置,而是用服务器默认的DNS地址 |
cache_access_log /var/log/squid/access.log | 访问日志文件的保存路径 |
cache_log /var/log/squid/cache.log | 缓存日志文件的保存路径 |
visible_hostname linuxprobe.com | 设置Squid服务器的名称 |
正向代理————》标准正向代理
Squid服务程序软件包在正确安装并启动后,默认就已经可以为用户提供标准正向代理模式服务了,而不再需要单独修改配置文件或者进行其他操作。
确定服务端和客户端网络互通,并且服务端可以上外网。
[root@zhangjh ~]# ping 192.168.10.20 -c 3 -i 0.1 PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data. 64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.754 ms 64 bytes from 192.168.10.20: icmp_seq=2 ttl=64 time=0.210 ms 64 bytes from 192.168.10.20: icmp_seq=3 ttl=64 time=0.236 ms --- 192.168.10.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 202ms rtt min/avg/max/mdev = 0.210/0.400/0.754/0.250 ms [root@zhangjh ~]# ping www.baidu.com -c 3 -i 0.1 PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data. 64 bytes from 111.13.100.92: icmp_seq=1 ttl=54 time=6.70 ms 64 bytes from 111.13.100.92: icmp_seq=2 ttl=54 time=7.54 ms 64 bytes from 111.13.100.92: icmp_seq=3 ttl=54 time=8.97 ms --- www.a.shifen.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 207ms rtt min/avg/max/mdev = 6.706/7.740/8.973/0.936 ms
客户端打开浏览器,设置代理。
默认代理端口号是3128,如图所示:
然后打开浏览器,访问任意网站:
Squid服务程序默认使用3128、3401与4827等端口号,因此可以把默认使用的端口号修改为其他值,以便起到一定的保护作用。
[root@zhangjh ~]# vim /etc/squid/squid.conf 58 # Squid normally listens to port 3128 59 http_port 8888
修改完后重启squid服务,客户端修改代理端口号即可正常访问。
ACL访问控制:
在日常工作中,企业员工一般是通过公司内部的网关服务器来访问互联网,当将Squid服务程序部署为公司网络的网关服务器后,Squid服务程序的访问控制列表(ACL)功能将发挥它的用武之地。
它可以根据指定的策略条件来缓存数据或限制用户的访问。比如很多公司会分时段地禁止员工逛淘宝、打网页游戏,这些禁止行为都可以通过Squid服务程序的ACL功能来实现。
实例:禁止所有客户端访问网址中包含game关键词的网站。
1、编辑squid配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf
添加两行: acl deny_keyword url_regex -i game http_access deny deny_keyword [root@zhangjh ~]# systemctl restart squid
禁止之前是可以访问腾讯游戏页面的:
禁止之后效果:
正向代理————》透明正向代理:
“透明”二字指的是让用户在没有感知的情况下使用代理服务,这样的好处是一方面不需要用户手动配置代理服务器的信息,进而降低了代理服务的使用门槛;另一方面也可以更隐秘地监督员工的上网行为。
在透明代理模式中,用户无须在浏览器或其他软件中配置代理服务器地址、端口号等信息,而是由DHCP服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。
1、修改客户端的网络配置
root@zhangjh ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond-bond0 IPADDR=192.168.10.20 NETMASK=255.255.255.0 GATEWAY=192.168.10.10 [root@zhangjh ~]# vim /etc/resolv.conf nameserver 8.8.8.8 nameserver 114.114.114.114 [root@zhangjh ~]# systemctl restart network
2、把客户端浏览器的代理信息删除
3、配置防火墙
4、编辑配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf 60 http_port 3128 transparent 61 62 # Uncomment and adjust the following to add a disk cache directory. 63 cache_dir ufs /var/spool/squid 100 16 256
[root@zhangjh ~]# squid -k parse .....省略输出内容..... [root@zhangjh ~]# squid -z .....省略输出内容..... [root@zhangjh ~]# systemctl restart squid
5、这时客户端主机再刷新一下浏览器,就又能访问网络了
反向代理:
网站页面是由静态资源和动态资源一起组成的,其中静态资源包括网站架构CSS文件、大量的图片、视频等数据,这些数据相对于动态资源来说更加稳定,一般不会经常发生改变。但是,随着建站技术的更新换代,外加人们不断提升的审美能力,这些静态资源占据的网站空间越来越多。如果能够把这些静态资源从网站页面中抽离出去,然后在全国各地部署静态资源的缓存节点,这样不仅可以提升用户访问网站的速度,而且网站源服务器也会因为这些缓存节点的存在而降低负载。
反向代理是Squid服务程序的一种重要模式,其原理是把一部分原本向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。但是这种技术的弊端也很明显,如果有心怀不轨之徒将自己的域名和服务器反向代理到某个知名的网站上面,从理论上来讲,当用户访问到这个域名时,也会看到与那个知名网站一样的内容(有些诈骗网站就是这样骗取用户信任的)。因此,当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也可以避免这种窃取行为。如果访问开启了防护功能的网站,一般会看到如图所示的报错信息。
1、修改配置文件
[root@zhangjh ~]# vim /etc/squid/squid.conf 60 http_port 192.168.1.106:80 vhost #桥接网卡ip地址 61 cache_peer 42.121.252.58 parent 80 0 originserver #网站原服务器ip地址,可以通过ping网站域名获得 [root@zhangjh ~]# systemctl restart squid
2、使用反向代理模式访问网站