{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
一、简介
代理服务器英文全称是proxyserver,其功能就是代理网络用户去取得网络信息。
squid是一个缓存internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向squid发出一个申请,要squid代替其进行下载,然后squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,squid把保存的备份立即传给用户,使用户觉得速度相当快。squid可以代理http、ftp、gopher、ssl和wais等协议并且squid可以自动地进行处理,可以根据自己的需要设置squid,使之过滤掉不想要的东西。
1.1工作流程
当代理服务器中有客户端需要的数据时:
a.客户端向代理服务器发送数据请求;
b.代理服务器检查自己的数据缓存;
c.代理服务器在缓存中找到了用户想要的数据,取出数据;
d.代理服务器将从缓存中取得的数据返回给客户端。
当代理服务器中没有客户端需要的数据时:
1.客户端向代理服务器发送数据请求;
2.代理服务器检查自己的数据缓存;
3.代理服务器在缓存中没有找到用户想要的数据;
4.代理服务器向internet上的远端服务器发送数据请求;
5.远端服务器响应,返回相应的数据;
6.代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。
squid代理服务器工作在tcp/ip的应用层。
1.2squid分类
按照代理类型的不同,可以将squid代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。
官方地址:http://www.squid-cache.org/
参考文档:http://www.squid-cache.org/doc/config/
二、系统环境
操作系统:centosrelease6.4(final)
squid版本:squid-3.1.10-20.el6_5.3.x86_64
selinux=disabled
httpservice:stoped
三、安装squid服务
3.1检查squid软件是否安装
#rpm-qa|grepsquid
3.2如果未安装,则使用yum方式安装
#yum-yinstallsquid
3.3设置开机自启动
#chkconfig--level35squidon//在3、5级别上自动运行squid服务
四、squid服务器的配置文件说明
squid的主配置文件是/etc/squid/squid.conf,所有squid的设定都是在这个文件里配置,下面我们来讲解一下该文件的配置选项。
http_port3128//设置监听的ip与端口号cache_mem64mb//额外提供给squid使用的内存,squid的内存总占用为x*10+15+“cache_mem”,其中x为squid的cache占用的容量(以gb为单位),//比如下面的cache大小是100m,即0.1gb,则内存总占用为0.1*10+15+64=80m,推荐大小为物理内存的1/3-1/2或更多。maximum_object_size4mb//设置squid磁盘缓存最大文件,超过4m的文件不保存到硬盘minimum_object_size0kb//设置squid磁盘缓存最小文件maximum_object_size_in_memory4096kb//设置squid内存缓存最大文件,超过4m的文件不保存到内存cache_dirufs/var/spool/squid10016256//定义squid的cache存放路径、cache目录容量(单位m)、一级缓存目录数量、二级缓存目录数量logformatcombined%>a%ui%un[%tl]"%rm%ruhttp/%rv"%hs%
关于acl的知识,大家可以自行百度查阅,其他更多高级选项,请参考官方文档:http://www.squid-cache.org/doc/config/。
注意:squid2.0和squid3.0的差别还是很大的,如果配置完,启动squid不正确,请大家多多参考官方文档的相应版本说明。
五、普通代理服务
即标准的、传统的代理服务,需要客户机在浏览器中指定代理服务器的地址、端口。
实验拓扑图如下:
5.1配置squid代理服务器ip地址
将eth1的ip地址修改为200.168.10.1
#ifconfigeth1200.168.10.1
5.2编辑squid主配置文件/etc/squid/squid.conf
http_port3128cache_mem64mbmaximum_object_size4mbcache_dirufs/var/spool/squid10016256access_log/var/log/squid/access.logacllocalnetsrc192.168.1.0/24http_accessallowlocalnethttp_accessdenyallvisible_hostnamesquid.david.devcache_mgrmchina_tang@qq.com
5.3初始化
#squid–z
5.4启动squid
#/etc/init.d/squidstart
5.5配置web服务器
a.安装apache
#rpm-qa|grephttpd
#yum-yinstallhttpd
b.启动apache并加入开机启动
#/etc/init.d/httpdstart
#chkconfighttpdon
c.创建index.html
#echo"
d.修改web服务器ip地址
将web服务器的ip地址修改为200.168.10.2
#ifconfigeth0200.168.10.2
5.6配置客户端ip地址
5.7配置浏览器代理
打开浏览器(以ie为例,其他类似),菜单栏->工具->internet选项->连接->局域网设置->代理服务器,按照以下格式设置。
5.8测试
测试成功。
5.9测试错误页面
在oraclevmvirtualbox里,因为上面手动设置了ip地址,导致外网不能访问,刚好可以测试访问出错的页面。
可以看到在squid配置文件里设置的参数在错误页面里的显示。
六、透明代理服务
适用于企业的网关主机,客户机不需要指定代理服务器地址、端口等信息,通过iptables将客户机的web访问数据转交给代理服务程序处理。
实验拓扑图如下:
6.1修改squid主配置文件/etc/squid/squid.conf
http_port3128transparentcache_mem64mbmaximum_object_size4mbcache_dirufs/var/spool/squid10016256access_log/var/log/squid/access.logacllocalnetsrc192.168.1.0/24http_accessallowlocalnethttp_accessdenyallvisible_hostnamesquid.david.devcache_mgrmchina_tang@qq.com
在http_port3128后添加transparent关键字。
6.2reload
reload让上面的配置生效。
#/etc/init.d/squidreload
6.3添加iptables规则,把内部的http请求重定向到3128端口
a.启动iptables服务
#/etc/init.d/iptablesstart
b.清除现有iptablesfilter表规则
#iptables-f
c.保存iptables设置
#/etc/init.d/iptablessave
d.查看nat表设置
#iptables-tnat-l-n
e.在nat表中新增一条规则
#iptables-tnat-iprerouting-ieth0-s192.168.1.0/24-ptcp--dport80-jredirect--to-port3128
f.保存
g.设置iptables开机启动
#chkconfigiptableson
6.4修改客户端ip地址
将默认网关设置为squid服务器的内网ip地址。
6.5在浏览器中,取消代理设置
6.6测试
透明代理测试成功。
七、反向代理服务
为internet用户访问企业web站点提供缓存加速。
实验拓扑图如下:
7.1关闭防火墙
#/etc/init.d/iptablesstop
7.2修改webserver主页
web1:
#echo"
web2:
#echo"
7.3配置squid
http_port80accelvhosthttp_accessallowallcache_peer192.168.1.18parent800originserverround-robinweight=1cache_peer192.168.1.19parent800originserverround-robinweight=1visible_hostnamesquid.david.devcache_mgrmchina_tang@qq.com
7.4启动squid服务
squid启动失败,因为上面设定了squid的监听端口是80,和系统的http服务冲突,所以要将http服务停掉。
7.5squid启动失败,将系统开机自启动的apache服务关闭。
7.6测试
squid采用了round-robin,所以客户端的访问将轮询两台web服务器,采用"ctrl+f5"来深度刷新测试。
web1:
web2:
查看squid的访问日志。
八、实际应用
下面实验将模拟通过不同的域名访问不同的机器,简单实现企业应用中的负载均衡。客户端在浏览器地址栏中输入www.squid.dev,将访问192.168.1.18这台机器,访问bbs.squid.dev,将访问192.168.1.19这台机器。
实验拓扑图如下:
8.1修改webserver主页
web1:
#echo"
web2:
#echo"
8.2配置squid
http_port80accelvhosthttp_accessallowallcache_peer192.168.1.18parent800originservername=wwwcache_peer192.168.1.19parent800originservername=bbscache_peer_domainwwwwww.squid.devcache_peer_domainbbsbbs.squid.devvisible_hostnamesquid.david.devcache_mgrmchina_tang@qq.com
8.3配置客户端
这里可以使用dns服务来解析,这里我们为了方便,就在hosts文件里直接指定。
修改c:windowssystem32driversetchosts文件
8.4测试网络情况
8.5测试www.squid.dev
8.6测试bbs.squid.dev
8.7查看squid访问日志
8.8查看两台服务器的apache访问日志
#tailf/var/log/httpd/access.log