1. Squid服务介绍
Squid是比较知名的代理软件,它不仅可以跑在Linux上,还可以跑在Windows以及Unix上,它的技术已经非常成熟。目前使用Squid的用户也是十分广泛的。Squid与Linux下其它的代理软件如Apache、Socks、TIS FWTK相比,下载安装简单,配置简单灵活,支持缓存和多种协议。
Squid之所以用的很多,是因为它的缓存功能。Squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的IO。从经济角度考虑,它是很多网站架构中不可或缺的角色。
Squid不仅可以做正向代理,也可以做反向代理。
当作为正向代理时,Squid后面是客户端,客户端想上网需经过Squid。当一个用户(客户端)想要请求一个主页时,它向Squid发出一个申请,要Squid替它请求,然后Squid连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度非常块。使用正向代理时,客户端需要做一些设置,才能实现,也就是平时我们在IE选项中设置的那个代理。
而反向代理是,Squid后面为某个站点的服务器,客户端请求该站点时,会先把请求发送到Squid上,然后Squid去处理用户的请求动作。
总之,简单来说,正向代理,Squid后面是客户端,客户端上网要通过Squid去上。反向代理,Squid后面是服务器,服务器返回给用户数据需要走Squid。
那什么时候需要配置正向代理,又什么时候配置反向代理呢?有这样一个观点就是:正向代理用在企业的办公环境中,员工上网需要通过Squid代理来上网,这样可以节省网络带宽资源。而反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器,它用于网站架构中。
2. Squid正向代理
CentOS系统自带Squid包,安装命令是:yum install -y squid
当然你也可以源码包编译安装,Squid的官网是http://www/squid-cache.org,下载需要的版本。如果想要编译安装Squid,参考下面的编译参数:
注意:这些参数不见得符合你的需求,这里只是提供一个参考。其实,CentOS中自带的Squid足以满足需求,所以没有必要去编译安装。
安装完后,可以查看Squid版本(同时还可以看到Squid的编译参数):
下面需要配置一下Squid,来实现正向代理:
我们不使用默认的配置文件,删除它,重新写入如下配置:
在配置文件中有几处需要简单描述一下:
- 第一行的
http_port 3128
这个指的是,Squid服务启动后将要监听的端口,也可以是80. cache_dir
这个用来指定本地磁盘上的缓存目录(需要手动创建,否则启动不了),后边的1024为大小,单位是M,具体根据你的磁盘大小决定。cache_mem
它用来规定缓存占用内存的大小,即把缓存的东西存到内存里,具体也需要根据你机器的内存定,如果你的机器只是跑Squid服务,那么留给系统512内存外,其他可以都分给Squid。
配置文件保存后,可以先检测一下是否有语法错误:
如果提示信息为:
这是说squid还未启动,没有关系,显示成这样说明配置文件没有问题。在启动前还得做一件事,就是初始化缓存目录:
在上述的初始化完成后,就可以启动squid了:
查看squid是否启动:
还有1个关于squid的命令需要掌握:
squid -k rec
可以重新加载配置service squid start
启动服务service squid restart
重启服务
到这一步,就已经可以在真机上测测看squid的正向代理了。可以在IE浏览器里面进行设置。
或者直接使用curl命令测试即可:
如果你看到了一大串,说明squid正向代理设置成功了。另外我们也可以观察squid对图片的缓存:
上面连续访问了两次同样的图片资源,可以发现前后两次的不同,其中X-Cache-Lookup: HIT from localhost.localdomain:3128
显示,该请求已经HIT,它直接从本地的3128端口获取了数据。
有时我们会有这样的需求,就是想要限制某些域名不能通过代理访问,或者说只想代理某几个域名,这该如何做呢?在squid.conf中找到
在其下面添加四行:
其中,我的白名单域名为:.apelearn.com .aminglinux.com
,这里的.
表示万能匹配。前面可以是任意字符,你只需要填写你的白名单即可。
重启squid再来测测看:
访问百度已经变成了403了。如果要设置黑名单呢?道理是一样的:
重启squid后,测试:
可以看到baidu.com可以访问,而sina.com不可以访问了。
3. Squid反向代理
反向代理配置过程其实和前面的正向代理没有什么太大的区别,唯一的区别是配置文件中一个地方需要修改一下。需要把:
改为:
然后再增加你要代理的后端真实服务器信息:
说明:
- 因为咱们之前没有配置网站信息,所以就拿QQ和Baidu来做个例子。
- 其中,
chache_peer
为配置后端的服务器IP及端口。 name
后边为要配置的域名,这里和后面的cache_peer_domain
相对应。
实际的应用中,IP大多为内外IP,而域名也许会有多个,如果是squid要代理一台Web上的所有域名,那么就写成这样:
后面连cache_peer_domain
也省了。
反向代理主要用于缓存静态项,因为诸多静态项目尤其是图片、流媒体等比较耗费带宽,在中国,联通网访问电信的资源本来就慢,如果再去访问大流量的图片、流媒体那更会满了,所以如果在联通网配置一个Squid反向代理,让联通客户端直接访问这个联通Squid,而这些静态项已经被缓存在了Squid上,这样就大大加快了访问速度。也许你听说过CDN,其实它的设计原理就是这样的思路。
接下来,测试一下反向代理。因为修改了配置文件,所以需要重新加载squid配置文件或者重启squid服务:
你会发现,baidu.com和qq.com都能正常访问,然而sina.com访问503了,这是因为我们并没有加sina.com的相关设置。
4. 关于Squid的操作
关于Squid还有一些知识点,需要掌握:
上面把squid命令所用到的选项全部打印出来了。但是最常用的除了squid -k check
外,还有一个那就是squid -k reconfigure
。它们俩都可以简写为:
squid -kche
squid -krec
- 且其中第二条命令表示重新加载配置文件,如果我们更改了配置文件后,不需要重启squid服务,直接使用这个命令重新加载配置即可。