CleverCode最近研究了一下squid的安装与配置。现在总结一下。分享给大家。
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。
Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid 发出一个申请,要Squid 代替其进行下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户,使用户觉得速度相当快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且Squid 可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。
普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
http://download.csdn.net/detail/clevercode/9337437。
squid服务器:192.168.142.133。
web服务器:192.168.142.130 与192.168.142.131。
# cd /usr/local/squid/etc/
# mv squid.conf squid.conf.bak
# vi /usr/local/squid/etc/squid.conf
#主机名 visible_hostname static.squid-133 #设置监听的IP与端口号 http_port 80 vhost vport #额外提供给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或更多。 cache_mem 4096 MB #设置squid内存缓存最大文件,超过2M的文件不保存到内存 maximum_object_size_in_memory 2048 KB #使用lru表示:它只替换长时间没有被访问过的对象 memory_replacement_policy lru #此记录文件用来记录缓冲对象的添加,删除情况(一般可设置为:cache_store_log none, #来降低日志文件占用的磁盘空间,这一点请特别注意。) cache_store_log none #log文件日志格式 logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh #定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量 cache_dir aufs /data0/cache 20480 32 256 #关闭访问日志 access_log none #此文件记录SQUID PROXY启动,关闭以及代理服务器系统的相关的信息包括系统活动记录 cache_log /data0/cache/logs/cache.log #进程id保存文件 pid_filename /data0/cache/logs/squid.pid #允许最大打开文件数量,0 无限制 max_open_disk_fds 0 #允午最小文件请求体大小 minimum_object_size 0 KB #允午最大文件请求体大小 maximum_object_size 32768 KB #add for gzip server_http11 on cache_vary on acl nginx rep_header Server ^nginx ^fy broken_vary_encoding allow nginx incoming_rate 10 reload_into_ims on acl PURGE method PURGE #允午本机IP acl localhost src 127.0.0.1 192.168.142.0/24 #允许localhost使用该代理 http_access allow PURGE localhost #http_access deny PURGE #用于确定一个页面进入cache后,它在cache中停留的时间(refresh_pattern [-i] regexp min percent max [options]) refresh_pattern -i \.swf$ 1440 50% 129600 reload-into-ims refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims #ignore-reload override-expire ignore-no-cache ignore-private override-lastmod refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims #refresh_pattern -i \.jpg$ 1440 90% 129600 ignore-reload override-expire ignore-no-cache ignore-private override-lastmod refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims refresh_pattern -i \.png$ 1440 90% 129600 ignore-reload override-expire ignore-no-cache ignore-private override-lastmod #refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload override-expire ignore-no-cache ignore-private override-lastmod refresh_pattern -i \.bmp$ 1440 90% 129600 ignore-reload override-expire ignore-no-cache ignore-private override-lastmod refresh_pattern -i \.js$ 1440 90% 129600 ignore-reload override-expire ignore-no-cache ignore-private override-lastmod #refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims #从客户端过来的请求,如果是 pic.domain.com,pic2.domain.com则Squid向 Server 192.168.142.130的端口80发送请求; cache_peer 192.168.142.130 parent 80 0 no-query no-digest originserver name=pic cache_peer_domain pic pic.domain.com pic2.domain.com #从客户端过来的请求,如果是 res.domain.com,res2.domain.com则Squid向 Server 192.168.142.131的端口80发送请求; cache_peer 192.168.142.131 parent 80 0 no-query no-digest originserver name=res cache_peer_domain res res.domain.com res2.domain.com #允许所有IP访问 acl all src 0.0.0.0/0.0.0.0 http_access allow all #允许所有的http报头 header_access Via deny all #此标记设置snmp_port端口为3401,可以使MRTG监测服务运行状态 acl CactiServer src 192.168.142.93 acl SNMP snmp_community nihao@monitor snmp_port 3401 snmp_access allow SNMP CactiServer snmp_access deny all #上面几个就是说遇到URL中有包含cgi-bin和以avi等结尾的都不要缓存, acl QUERY urlpath_regex cgi-bin .cgi$ .avi$ .wmv$ .rm$ .ram$ .mpg$ .mpeg$ .zip$ .exe$ cache deny QUERY #acl PURGE method PURGE #acl localhost src 172.16.218.0/32 #http_access allow PURGE localhost #带问号的不缓存 refresh_pattern \? 0 100% 0 ignore-reload #5h refresh_pattern \.php\?keyword 240 50% 720 refresh_pattern \.php\?housetag 3 50% 6 refresh_pattern \.html 5 50% 30 #以root来启动squid,并且没有增加cache_effective_user行,那么squid默认以nobody用户运行 cache_effective_user www cache_effective_group www
# 后台启动
# /usr/local/squid/sbin/squid -s
1)通过访问http://res.domain.com/comm.js。可以到看到res.domain.com是指向了192.168.142.133。但是实际取出js文件是从192.168.142.131服务器中取得。
2)修改comm.js 成为如下内容。但是发现访问comm.js内容还是没有变。
#vi comm.js
this is from 192.168.142.131 js! i am change !
3)清除133缓存,再访问数据就变了。
# /usr/local/squid/bin/squidclient -m PURGE -p 80 "http://res.domain.com/comm.js"
4)改变URL也会是数据变化。squid缓存的key可以理解为url的md5。只要url发生了变化,那么数据就会发生编号。
如图访问:http://res.domain.com/comm.js?r=123456。
5 )访问图片
# /usr/local/squid/sbin/squid -z 初始化缓存空间
# /usr/local/squid/sbin/squid 前台启动 (用于输出调试)
# /usr/local/squid/sbin/squid -s 后台启动
# /usr/local/squid/sbin/squid -k shutdown 停止
# /usr/local/squid/sbin/squid -k reconfigure 重新载入配置文件
# /usr/local/squid/sbin/squid -k parse 检查conf
# /usr/local/squid/sbin/squid -k rotate 优化碎片
# /usr/local/squid/bin/squidclient -p 80 mgr:info 查看squid命中情况
# /usr/local/squid/bin/squidclient -m PURGE -p 80 "http://res.domain.com/comm.js" 删除指定URL缓存