1.安装squid软件包这里用yum来安装。
[root@zh888 ~]# yum -y install squid
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
addons | 951 B 00:00
base | 1.1 kB 00:00
extras | 2.1 kB 00:00
updates | 1.9 kB 00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package squid.i386 7:2.6.STABLE21-6.el5 set to be updated
--> Processing Dependency: perl(URI::URL) for package: squid
--> Running transaction check
---> Package perl-URI.noarch 0:1.35-3 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
squid i386 7:2.6.STABLE21-6.el5 base 1.3 M
Installing for dependencies:
perl-URI noarch 1.35-3 base 116 k
Transaction Summary
================================================================================
Install 2 Package(s)
Upgrade 0 Package(s)
Total download size: 1.4 M
Downloading Packages:
(1/2): perl-URI-1.35-3.noarch.rpm | 116 kB 00:01
(2/2): squid-2.6.STABLE21-6.el5.i386.rpm | 1.3 MB 00:03
--------------------------------------------------------------------------------
Total 239 kB/s | 1.4 MB 00:05
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : perl-URI 1/2
Installing : squid 2/2
Installed:
squid.i386 7:2.6.STABLE21-6.el5
Dependency Installed:
perl-URI.noarch 0:1.35-3
Complete!
2.[root@zh888 ~]# /etc/rc.d/init.d/squid start//启动squid服务
init_cache_dir /var/spool/squid... Starting squid: . [ OK ]
[root@zh888 ~]# chkconfig --list squid
squid 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@zh888 ~]# chkconfig squid on//让系统开机runlevel 234级别启动
[root@zh888 ~]# chkconfig --list squid
squid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@zh888 ~]# /etc/rc.d/init.d/squid status//查看squid的状态
squid (pid 1646) is running...
3.[root@zh888 ~]# cd /etc/squid/
[root@zh888 ~]# wc squid.conf
[root@zh888 ~]# diff squid.conf.default squid.conf
[root@zh888 ~]#sed -e '/\(^#\|^$\)/d' squid.conf.default > squid.conf
4.贴上自己2.6版本squid的/etc/squid/squid.conf文件
http_port 192.168.100.1:3128 transparent// 指定Squid监听浏览器客户请求的端口号3128
cache_mem 200 MB //配置内存缓存数
cache_swap_high 85//最多允许使用swap 85% ipcache_size 2048
cache_swap_low 70 // 最小允许ipcache使用swap 70%
cache_log /dev/null //定义日志存放记录
cache_store_log /dev/null //store日志
emulate_httpd_log on //使用HTTPD登录格式
pid_filename /var/run/squid.pid //pid文件
useragent_log /var/log/squid/useragent.log //用户代理登录文件
ident_timeout 1 seconds //RFC931 身份查找超时:1秒 ident_timeout 1 seconds
cache_dir ufs /home/samba/software/squid 30000 16 256 //高速缓存目录:/home/samba/software/squid 默认目录是/var/spool/squid类型:ufs大小:30000 一级目录:16 二级目录:256
dns_nameservers 202.101.172.35 //dns域名这个为浙江电信
cache_effective_user squid //以unix用户身份运行
cache_effective_group squid //以unix用户身份运行
cache_mgr enjoygoodboy@163.com//高速缓存管理邮件地址
visible_hostname zh888.com//可见主机名
acl all src 0.0.0.0/0.0.0.0 #允许所有IP访问
acl manager proto cache_object #manager
acl localhost src 127.0.0.1/255.255.255.255#允午本机IP
acl to_localhost dst 127.0.0.0/8#允许目的地址为本机IP
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT#请求方法以CONNECT
http_access allow all#允许所有人使用该代理.因为这里是代理加速web服务器
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
coredump_dir /var/spool/squid
重要提示
由于squid的访问控制规则是从上到下寻找匹配,如果匹配到规则,则停止往下匹配.
所以如果要做访问控制,allow和deny的顺序是很有讲究的.
此外,squid.conf默认的4000多行配置不是白给的,真的很有用.有兴趣深入研究squid的哥们
建议花时间看一下.
5.squid常用命令:
/usr/local/squid/sbin/squid -z 初始化缓存空间
/usr/local/squid/sbin/squid 启动
/usr/local/squid/sbin/squid -k shutdown 停止
/usr/local/squid/sbin/squid -k reconfigure 重新载入配置文件
/usr/local/squid/sbin/squid -k rotate 轮循日志
6.启动nat地址转换启动80到3128转换 eth1为lan地址,eth0为wan地址,具体情况可以自行修改。
echo "iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 192.168.20.xx" >>/etc/rc.local
echo "iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.100.0/24 --dport 80 -j REDIRECT --to-ports 3128" >>/etc/rc.local
echo "echo 1 >/proc/sys/net/ipv4/ip_forward">>/etc/rc.local
7.最后客户端xp的ip地址设置ip 192.168.100.12 网络掩码 255.255.255.0
网关为192.168.100.1为代理服务器的lan的ip地址,dns为202.101.172.35也可以是192.168.100.1因为这个我是做bind的所以可以设置为192.168.100.1如果没做过域名解析那就添加8.8.8.8即可。
8. 疑惑的问题
1.cat /var/log/squid/access.log
73 192.168.100.12 TCP_MISS/304 298 GET h - DIRECT/118.144.78.59 总是tcp_miss但是客户端访问没问题。
[root@zh888 squid]# cat /var/log/squid/access.log|gawk '{print $4}'|sort|uniq -c|sort -nr
40 TCP_MISS/200
27 TCP_MISS/304
10 TCP_IMS_HIT/304
6 TCP_MISS/301
1 TCP_NEGATIVE_HIT/404
1 TCP_MISS/204
1 TCP_MEM_HIT/200
1
2./etc/squid/squid.conf//
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
icp_access allow all
http_access allow all
这四句话到底要不加入,但是加入是可以的。
http_access有访问的顺序的,因为默认是全部deny。不过用普通代理也是可以的如图所示:
9.最后介绍一下/var/log/squid/access.log
相应于HTTP请求,下列标签可能出现在access.log文件的第四个域。
TCP_HIT
Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。
TCP_MISS
Squid没有请求资源的cache拷贝。
TCP_REFERSH_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。
TCP_REF_FAIL_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。
TCP_REFRESH_MISS
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。
TCP_CLIENT_REFRESH_MISS
Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
TCP_SWAPFAIL_MISS
Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。
TCP_NEGATIVE_HIT
在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。
TCP_MEM_HIT
Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。
TCP_DENIED
因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。
TCP_OFFLINE_HIT
当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。
TCP_REDIRECT
重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。
NONE
无分类的结果用于特定错误,例如无效主机名。
相应于ICP查询,下列标签可能出现在access.log文件的第四域。
UDP_HIT
Squid在cache里发现请求资源的貌似新鲜的拷贝。
UDP_MISS
Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。
UDP_MISS_NOFETCH
跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。
UDP_DENIED
因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。
UDP_INVALID
Squid接受到无效查询(例如截断的消息、无效协议版本、URI里的空格等)。Squid发送UDP_INVALID响应到客户端。
总结:squid命中率很低原因是:找到cach_hit命中率低的原因了:我的squid.conf配置文件中,cache_mem 200 MB,这个值设置的太低,网上建议应该设置为内存的1/3大小,之后,将其改为cache_mem 300 MB后,用命令: squidclient -h host-squid-01 -p 3128 mgr:info结果如下:
Median Service Times (seconds) 5 min 60 min:
HTTP Requests (All): 0.12783 0.13498
Cache Misses: 0.24524 0.30459
Cache Hits: 0.00865 0.00562 //cach_hit命中率86.5%
Near Hits: 0.17711 0.18699
Not-Modified Replies: 0.00286 0.00286
DNS Lookups: 0.04237 0.04639
ICP Queries: 0.00000 0.00000
本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/653215,如需转载请自行联系原作者