代理缓存服务之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、使用反向代理模式访问网站

代理缓存服务之Squid的更多相关文章
- 《Linux就该这么学》培训笔记_ch16_使用Squid部署代理缓存服务
<Linux就该这么学>培训笔记_ch16_使用Squid部署代理缓存服务 文章最后会post上书本的笔记照片. 文章主要内容: 代理缓存服务 配置Squid服务程序 正向代理 标准正向代 ...
- 第16章 使用Squid部署代理缓存服务
章节概述: 本章节从代理缓存服务的工作原理开始讲起,让读者能够清晰理解正向代理(普通模式.透明模式)与反向代理的作用. 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低 ...
- squid代理缓存服务
man.linuxde.net 1.squid是Linux系统中的代理缓存服务,通常用作WEB网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存. 2.squid服务特点:配置简单.效 ...
- Linux基础学习-使用Squid部署代理缓存服务
使用Squid部署代理缓存服务 Squid是Linux系统中最为流行的一款高性能代理服务软件,通常作为Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存.Squid服务配置简单. ...
- 虚拟机中Linux环境下使用Squid部署代理缓存服务(及透明传输)
小知识: 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低原服务器的负载. 不仅如此,还为读者们添加了对指定IP地址.网页关键词.网址与文件后缀的ACL访问限制功能的实 ...
- Linux下squid代理缓存服务环境部署
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载 ...
- 使用Squid部署代理缓存服务(标准正向、透明正反向代理)
正向代理让用户可以通过Squid服务程序获取网站页面等数据,具体工作形式又分为标准代理模式与透明代理模式.标准正向代理模式: 将网站的数据缓存在服务器本地,提高数据资源被再次访问时的效率,但用户必需在 ...
- 12、Nginx代理缓存服务
通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后端压力,提高网站并发延时 1.缓存常见类型 服务端缓存 代理缓存, 获取服务端内容进行缓存 客户端浏览器缓存 Nginx代理缓存原理 ...
- nginx的缓存服务
都知道缓存的目的是为了减小服务端的压力,可以在客户端直接取到数据 客户端---------------nginx(代理缓存)------------------服务端 代理缓存的描述: 就是客户端发送 ...
随机推荐
- js屏蔽鼠标操作
document.body.onselectstart=document.body.oncontextmenu=function(){ return false;}
- 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)
最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...
- vos设置禁止被叫特定号码段特定区域
问题: 为了防止卡线遭投诉被运营商停,给公司带来损失,对一些特定号段特定区域要进行限制,不让客户呼出 打开VOS3000 落地网关——补充设置——落地被叫前缀——禁止 添加禁止号段 具体案例: 如填写 ...
- do..while(false)的用法总结
首先要注意: do..while(0) 代表do里面的东西至少被执行一次,在这里仅仅执行一次. 此种用法有三个用处: 代替{}代码块,实现局部作用域.在某些宏定义时非常有用: #define f(x) ...
- CRM, C4C和Hybris的后台作业
CRM 使用事务码SM36查看CRM系统的后台作业: 举一些例子: ABAP_TEXT_INDEX这个job执行的report是ABAP_DOCU_CREATE_TEXT_INDEX: 负责填充buf ...
- Buffer实例
互联网的基础是数据的传送,一切都围绕着数据展开,比如发送啊,接收啊,这一切都离不开网络,通过之前,学会了通过http模块来搭建一个服务器,也实现了网络爬虫,nodejs中网络的部分,Net这个模块,对 ...
- numpy中的inf
numpy中的inf表示一个无限大的正数 import numpy x = numpy.inf x>9999999999999999999 结果为: True
- PMVS论文随笔(1)
博客园排版系统真的比较挫,可以访问我的github.io阅读 关于Unit的概念 在pmvs的源代码中,有一个函数是getUnit ,其函数如下(在PMVS2的windows版本代码,optim.cc ...
- C语言函数申明关键字inline
内联inline是给编译器的优化提示,如果一个函数被编译成inline的话,那么就会把函数里面的代码直接插入到调用这个函数的地方,而不是用调用函数的形式.如果函数体代码很短的话,这样会比较有效率,因为 ...
- 字符串缓冲区StringBuffer类,正则表达式
StringBuffer类 StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容.它是一个容器,容器中可以装很多字符串. ...