Squid是linux系统中最为流行的一款高性能代理服务软件,一般用做Web网站的前置缓存服务,可以代替用户向网站服务器请求页面数据并进行缓存。python
简单来讲,Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。linux
当有用户再请求相同的数据时,则能够直接将存储服务器本地的数据交付给用户,这样不只减小了用户的等待时间,还缓解了网站服务器的负载压力。vim
在使用Squid服务程序为用户提供缓存代理服务时,具备正向代理模式和反向代理模式之分。浏览器
正向代理模式:让用户经过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为标准代理模式与透明代理模式。 标准正向代理模式:把网站数据缓存到服务器本地,提升数据资源被再次访问时的效率,可是用户在上网时必须在浏览器等软件中填写代理服务器的IP地址与端口号信息,不然默认不使用代理服务。 透明正向代理模式:做用与标准正向代理模式基本相同,区别是用户不须要手动指定代理服务器的IP地址与端口号,因此这种代理服务对于用户来说是相对透明的。 反向代理模式:让多台节点主机反向缓存网站数据,从而加快用户访问速度。
正向代理服务的拓扑图:缓存
反向代理服务的拓扑图:服务器
准备两台虚拟机,一台用做Squid服务器,另一台用做Squid客户端。网络
Squid服务器和客户端的操做系统和IP地址信息:架构
主机名称 | 操做系统 | IP地址 |
Squid服务器 | RHEL 7 | 外网:dhcp获取 内网:192.168.10.10 |
Squid客户端 | RHEL 7 | 内网:192.168.10.20 |
这样一来,咱们就有了一台既能访问内网,又能访问外网的虚拟机了。一下子须要把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服务程序默认使用312八、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关键词的网站。
一、编辑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服务器将网络配置信息分配给客户端主机。这样只要用户打开浏览器便会自动使用代理服务了。
一、修改客户端的网络配置
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
二、把客户端浏览器的代理信息删除
三、配置防火墙
四、编辑配置文件
[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
五、这时客户端主机再刷新一下浏览器,就又能访问网络了
网站页面是由静态资源和动态资源一块儿组成的,其中静态资源包括网站架构CSS文件、大量的图片、视频等数据,这些数据相对于动态资源来讲更加稳定,通常不会常常发生改变。可是,随着建站技术的更新换代,外加人们不断提高的审美能力,这些静态资源占据的网站空间愈来愈多。若是可以把这些静态资源从网站页面中抽离出去,而后在全国各地部署静态资源的缓存节点,这样不只能够提高用户访问网站的速度,并且网站源服务器也会由于这些缓存节点的存在而下降负载。
反向代理是Squid服务程序的一种重要模式,其原理是把一部分本来向网站源服务器发起的用户请求交给Squid服务器缓存节点来处理。可是这种技术的弊端也很明显,若是有心怀不轨之徒将本身的域名和服务器反向代理到某个知名的网站上面,从理论上来说,当用户访问到这个域名时,也会看到与那个知名网站同样的内容(有些诈骗网站就是这样骗取用户信任的)。所以,当前许多网站都默认禁止了反向代理功能。开启了CDN(内容分发网络)服务的网站也能够避免这种窃取行为。若是访问开启了防御功能的网站,通常会看到如图所示的报错信息。
一、修改配置文件
[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
二、使用反向代理模式访问网站