在局域网的路由服务器中假设Squid代理来统一管理并加速内网机器对外部网络的访问速度。
下载并安装Squid
1、从服务器下载tar包。
wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.13-RELEASENOTES.......
2、tar 解压
3、编译并安装
./configure --prefix=/usr/local/squid
./make all
./make install
创建cache\log文件夹并赋予相应权限
mkdir /usr/local/squid/var/logs
mkdir /usr/local/squid/var/cache
chmod 777 -R /usr/local/squid/var/logs
chomd 777 -R /usr/local/squid/var/cache
初始化并启动
cd /usr/local/squid
# 初始化
./sbin/squid -z
# 启动
./sbin/squid start
配置文件相关
配置透明代理
设置透明代理后,内网用户就不需要在本机指定代理了。
# 将默认的3128端口设置为透明代理,3.x版本后为intercept,而不是transparent
# Squid normally listens to port 3128
http_port 3129
http_port 3128 intercept
之后,在路由中将80端口的请求全部转发到3129即可。
配置缓存
# Uncomment and adjust the following to add a disk cache directory.
cache_mem 128 MB
# 必须保证本路径真实存在,并赋予相应权限777
cache_dir ufs /usr/local/squid/var/cache/squid 400 16 256
cache_swap_high 95
cache_swap_low 90
# 缓存刷新策略
# 以下是网络上找的推荐策略
#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern -i .css$ 360 50% 2880 reload-into-ims
refresh_pattern -i .js$ 1440 50% 2880 reload-into-ims
refresh_pattern -i .html$ 720 50% 1440 reload-into-ims
refresh_pattern -i .jpg$ 1440 90% 2880 ignore-reload
refresh_pattern -i .gif$ 1440 90% 2880 ignore-reload
refresh_pattern -i .swf$ 1440 90% 2880 ignore-reload
refresh_pattern -i .jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i .png$ 1440 50% 2880 ignore-reload
refresh_pattern -i .bmp$ 1440 50% 2880 ignore-reload
refresh_pattern -i .doc$ 1440 50% 2880 ignore-reload
refresh_pattern -i .ppt$ 1440 50% 2880 ignore-reload
refresh_pattern -i .xls$ 1440 50% 2880 ignore-reload
refresh_pattern -i .pdf$ 1440 50% 2880 ignore-reload
refresh_pattern -i .rar$ 1440 50% 2880 ignore-reload
refresh_pattern -i .zip$ 1440 50% 2880 ignore-reload
refresh_pattern -i .txt$ 1440 50% 2880 ignore-reload
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
缓存命中情况验证
有两种方法,查日志以及client监控。* 注意:要清空浏览器本地缓存并刷新页面来验证代理服务器的缓存效果,否则很多请求会走浏览器本地缓存 *
日志查询
代理的日志位于/usr/local/squid/var/logs/access.log,通过分组统计状态码的数量获得大致的缓存命中情况:
cat /usr/local/squid/var/logs/access.log | gawk '{print $4}'| sort|uniq -c|sort -nr
前后两次获取页面的结果如下:
- TCP_MISS/200 - 为缓存未命中,从远程服务器下载的请求数量。
- TCP_REFRESH_UNMODIFIED/304 - 为本地缓存数量
- TCP_MEM_HIT - 为内存命中次数
可以看见有20条请求走了缓存。
client监控
/usr/local/squid/bin/squidclient -p 3128 mgr:info
可以看见Memory hit为内存缓存命中率,Disk hits 为磁盘缓存命中率。分别有5分钟和60分钟范围内的数据。