Squid代理缓存服务器
Squid简介
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:www.163.com)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
- 简而言之,就是为了加快访问速度,因而设置代理缓存服务器,再次访问的时候就非常快。
squid的代理的作用
当用户访问web网站时,会先访问代理服务器,squid代理服务器将数据缓存在自身内存中,并向用户反馈数据。
- 大大减少web服务器的压力
- 通过缓存的方式为用户访问web服务加速
- 对用户访问进行一些控制过滤
squid正向代理
1.标准模式
标准的代理缓冲服务被用于缓存静态的网页到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。
但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指名代理服务器的IP地址和端口号。客户端上网时,每次都把请求发送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。
2.透明模式
透明代理缓冲服务器和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。
透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因此不需要对浏览器作任何设置。
- 举个例子:正向代理语义上更侧重于,让代理服务器去帮忙请求某个网址。让代理服务器去帮忙访问qq,baidu这些网站等。
在这里有三个特征:
1、被访问的服务器(qq、baidu)只知道是代理服务器请求的,而不知道是你请求的
2、你可以明确知道你要请求的真实服务器(qq、baidu)
3、客户端必须在浏览器设置代理服务器的地址和端口。(设置之后,意思就是说只要在这个浏览器上输入的网址,统统都丢给代理服务器去帮忙访问)
squid反向代理
反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发给用户。这种方式通过降低了WEB服务器的请求数从而降低了WEB服务器的负载。
- 举个例子:腾讯的数据中心在深圳,客户直接访问深圳的服务器比较慢,所以腾讯在西安放置一个代理服务器(这个服务器没有资源,需要去深圳服务器缓存,西安这个服务器就是squid反向代理)。因此,西安的用户直接访问西安的服务器,当请求来时,去深圳的缓存,一来使深圳的服务器压力变小,而且也可以提高信息传输的速率。这也是cdn加速的一种方法。
squid正向代理配置
在真机:
- 先使自己的真机可以上网,然后开启真机的火墙
在服务端:
- 第一步:配好网络,配好网关(网关为真机),配好dns域名解析(resolv.conf),效果是可以ping baidu.com ,并关闭火墙。
- 第二步:安装并开启代理服务。
yum install squid -y
systemctl start squid
systemctl enable squid
- 第三步:修改配置文件
/etc/squid/squid.conf
netstat -antlupe | grep squid ##发现端口是3128
rpm -qc squid ##找到主配置文件/etc/squid/squid.conf
修改主配置文件:
56 行: http_access allow all
62 行 : cache_dir ufs /var/spool/squid 100 16 256
## 缓存目录:大小100M 16个一级目录 256个二级目录
- 第四步:重启服务后发现出现缓存目录/var/spool/squid/,大小100M 16个一级目录 256个二级目录。
在客户端:
-
先以可以开启图形的情况下ssh登录客户端:
ssh root@172.25.254.225 -X
-
打开浏览器,在浏览器里面找到代理设置(每种浏览器不一样)设置代理主机的信息:
edit—> preference–>advanced–>network–> settings -->manual—>写入代理服务器的ip和端口(我们刚刚设置过),选中use for all。
-
终端上依然ping不通,但是可以通过浏览器上网。
至此,正向代理就成功了。
squid反向代理配置
再来看看这个例子:腾讯的数据中心在深圳,客户直接访问深圳的服务器比较慢,所以腾讯在西安放置一个代理服务器(这个服务器没有资源,需要去深圳服务器缓存,西安这个服务器就是squid反向代理)。因此,西安的用户直接访问西安的服务器,当请求来时,去深圳的缓存,一来使深圳的服务器压力变小,而且也可以提高信息传输的速率。这也是cdn加速的一种方法。
实验思路:
西安代理服务器配置:
- 第一步:首先要确保没有apache(如果有,就卸载),也就是默认80端口没有被占用。
- 第二步:修改主机名
hostnamectl set-hostname xianProxy.westos.com
为了方便判断。 - 第三步: 具体修改配置文件的方式可以通过
less /usr/share/doc/squid-3.3.8/squid.conf.documented
参考。
- 第四步:修改配置文件
vim /etc/squid/squid.conf
写入:
59行: http_port 80 vhost vport
##利用80端口访问apache的资源,写入apache的虚拟主机和虚拟端口
60行: cache_peer 172.25.254.125 parent 80 0 proxy-only
##缓存点 远程真实服务器IP 类型:父级资源 0是没有备用端口 只作代理
- 第五步:重启服务,记得关闭火墙。
深圳远程服务器配置
- 第一步:修改主机名,方便确认。
- 第二步:安装apache,并写入发布文件。
yum install httpd ##安装apache服务
systemctl start httpd ##开启apache
vim /var/www/html/index.html ##编辑发布文件
<h1>这里是深圳总部服务器</h1>
systemctl restart httpd ##重启apache服务
- 第三步:记得关闭火墙。
西安普通网民客户端
在此客户端(也就是你的真机)写本地解析:
vim /etc/hosts
172.25.254.125 www.shenzhen.com
更明显的效果:我们在终端测试,可以清楚的看到域名对应的站点IP,而此时西安的IP:172.25.254.225并没有装apache,所以反向代理成功。
[root@foundation2 ~]# ping www.shenzhen.com
PING www.shenzhen.com (172.25.254.225) 56(84) bytes of data.
64 bytes from www.shenzhen.com (172.25.254.225): icmp_seq=1 ttl=64 time=0.129 ms
64 bytes from www.shenzhen.com (172.25.254.225): icmp_seq=2 ttl=64 time=0.142 ms
64 bytes from www.shenzhen.com (172.25.254.225): icmp_seq=3 ttl=64 time=0.137 ms