Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。SquidLinux下其它的代理软件如ApacheSocksTIS FWTKdelegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。Squid之所以使用广泛,是因为它的缓存功能,Squid缓存不仅可以节省宝贵的带宽资源,也可以大大降低服务器的I/O. 从经济角度考虑,它是很多网站架构中不可或缺的角色。

 

Squid不仅可以做正向代理,又可以做反向代理。

正向代理,Squid后面是客户端,客户端想上网不管什么网都得经过Squid. 当一个用户(客户端)想要请求一个主页时,它向Squid发出一个申请,要Squid替它请求,然后Squid 连接用户要请求的网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户请求同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

正向代理,客户端需要做一些设置,才能实现,也就是平时我们在IE选项中设置的那个代理。而反向代理是,Squid后面为某个站点的服务器,客户端请求该站点时,会先把请求发送到Squid上,然后Squid去处理用户的请求动作。

 

如何区分:

正向代理,Squid后面是客户端,客户端上网要通过Squid去上,对于用而言,是知道有代理的存在,常用在企业中,作为代理上网,可以很好的控制后面的客户端访问网站;

反向代理,Squid后面是服务器,服务器返回给用户数据需要走Squid,对于用户而言,是不知道访问是一个代理,而觉得是服务器本身.

 

官方地址:http://www.squid-cache.org/

参考文档:http://www.squid-cache.org/Doc/config/

 

系统环境:

操作系统:CentOS 6.7
Squid版本:3.1.23
hostname:balichvm.org

 

1)、安装

 yum install squid –y

 

2)、Squid 配置正向代理,默认的配置文件 /etc/squid/squid.conf

 

(1) 编辑/etc/squid/squid.conf,修改如下参数

增加 

visible_hostname balichvm.org

# cache_dir ufs /var/spool/squid 100 16 256           ##将前面的#号去掉
#格式表示:名称;文件格式; 缓存目录路径; 缓存大小,单位MB; 一级子目录的数量; 二级子目录的数量
cache_dir ufs /var/spool/squid 100 16 256     
 
# 增加cache_men,默认是没有这个配置,手动添加,由于缓存存放在硬盘上比较慢,可以放到内存上
cache_mem 64 MB
 
# 在refresh_pattern下面加入下我们需要缓存的文件,比如图片,音频,视频
refresh_pattern\.(jpg|png|gif|mp3|xml|js|css)  1440    20%    2880    ignore-reload

保存配置文件后,使用如下命令检查语法是否正确。

squid k check


 2)、启动squid

 /etc/init.d/squid start
正在启动 squid:.                [确定]

此时会在/var/spool/squid 生成缓存的目录。

 

3.测试。squid默认监听的是3128端口(如果有使用iptables需要放行,或者关闭。)

curl-x192.168.171.51:3128 -I www.baidu.com
HTTP/1.0 200 OK
Date: Fri, 06 Nov 2015 14:22:23 GMT
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Set-Cookie:BAIDUID=CA2C3DE3C2832FD456EA94D7B71041E5:FG=1; expires=Thu, 31-Dec-37 23:55:55GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie:BIDUPSID=CA2C3DE3C2832FD456EA94D7B71041E5; expires=Thu, 31-Dec-37 23:55:55 GMT;max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1446819743; expires=Thu,31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie:H_PS_PSSID=10299_17764_17898_1433_7477_17620_17900_17782_17001_17072_15769_12054;path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM"
Cache-Control: private
Cxy_all:baidu+75e6e8b83b863a1d9ff7d7c75a6c2d38
Expires: Fri, 06 Nov 2015 14:22:19 GMT
X-Powered-By: HPHP
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 1
BDQID: 0xd402ae2e0002376f
BDUSERID: 0
X-Cache: MISS from balichvm.org
X-Cache-Lookup: MISS from balichvm.org:3128
Via: 1.0 balichvm.org (squid/3.1.23)
Connection: keep-alive

 

这样就相当于是一台代理服务器,提供给后面的客户端上网,这种多用于企业。

如果只开放访问那些网站,需要用到访问控制了

 

4.访问控制(acl

acl CONNECT method CONNECT 下面增加如下配置

acl http proto HTTP            #指定使用什么协议
acl good_domain dstdomain .baidu.com .qq.com         #定义远程访问的域名
http_access allow good_domain       #允许的
http_access deny !good_domain

 

保存配置文件后,重新加载配置文件,可以使用这个命令:squid reconfigure

windows上测试,需要把ip的网关修改为squid服务器的IP地址。

 

 

3)、配置反向代理

 

反向代理是可以减轻后端的服务器的压力的,同时可以给用户更快的反问速度,从用户的角度来说,就想真实的访问的是后端的机器。因此,在配置文件上,首先squid监听的端口需要从3128修改为80

 

比如我们做一个百度的单向代理,配置文件修改如下:

 

# http_port 3128 改为 http_port80 accel vhost vport
http_port80 accel vhost vport
 
# 增加如下内容:
cache_peer 61.135.169.125 parent 80 0originserver name=baidu
cache_peer_domain baidu www.baidu.com

保存配置文件,重启服务

etc/init.d/squidrestart
停止 squid:................                      [确定]
正在启动squid:.                              [确定]

 

 

Windows上测试,需要修改hosts文件,把www.baidu.com指向到我们的squid服务器IP上即可。