1.安装
2.日志分析
2.1.sarg
3.mrtg
4.squid配置文件详解
本文用到的软件
Squid 2.5
网站:http://www.squid-cache.org
下载
sarg 2.0.6
网站:http://sarg.sourceforge.net
下载
MRTG 2.11.1
网站:http://people.ee.ethz.ch/~oetiker/webtools/mrtg
下载
1.安装
添加suqid用户和用户组
# groupadd squid
# useradd -g squid -s /bin/false -c "For Squid Only" squid
可以根据你的CPU选择相应的参数,GCC-3.1以上可針對CPU最佳化:
# export CFLAGES='-O2 -mcpu=pentium4 -march=pentium4 -mmmx -msse -msse2'
如果是其它cpu请按参考下面的
Pentium2: -O2 -mcpu=i686 -march=i686 -mmmx
Pentium3: -O2 -mcpu=pentium3 -march=pentium3 -mmmx -msse
# wget http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE9.tar.bz2
# tar jxvf squid-2.5.STABLE9.tar.bz2
# cd squid-2.5.STABLE9
#
./configure --prefix=/usr/local/squid --sysconfdir=/usr/local/etc
--enable-gnuregex --enable-async-io=80 --enable-icmp
--enable-kill-parent-hack --enable-snmp --disable-ident-lookups
--enable-cahce-digests --enable-arp-acl
--enable-err-language="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese" --enable-poll
--enable-linux-netfilter --enable-underscore
参数说明:
--prefix=/usr/local/squid 指定软件的安装路径
--enable-gnuregex 由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理
--enable-async-io=80 这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs
--enable-icmp 加入icmp支持
--enable-kill-parent-hack 关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦
--enable-snmp 此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口
--disable-ident-lookups 防止系统使用RFC931规定的身份识别方法
--enable-cahce-digests 加快请求时,检索缓存内容的速度
--enable-arp-acl 可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗
--enable-err-language="Simplify_Chinese" 和 --enable-default-err-languages="Simplify_Chinese" 指定出错是显示的错误页面为简体中文
--enable-poll 应
启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某些平
台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。
--enable-linux-netfilter 可以支持透明代理
--enable-underscore 允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址
# make
# make install
# mkdir /var/log/squid
# chown -R squid.squid /var/log/squid
Move the cache manager program to /var/www/cgi-bin/
# mv /usr/lib/squid/cachemgr.cgi /var/www/cgi-bin/cachemgr.cgi
将cache目录的所有者更改为squid
# chown -R squid.squid /cache1
# chown -R squid.squid /cache2
# chmod 770 /cache1
# chmod 770 /cache2
修改配置参数
下面是我的squid.conf文件
# cat /usr/local/etc/squid.conf
# Squid port
http_port 3128
### cache dir
cache_dir aufs /cache1 7000 16 256
cache_dir aufs /cache2 7000 16 256
# 缓存目录:/cache 类型:ufs 大小:530mb 可以在目录下建立一级(16)和二级目录(256)
cache_mem 32 MB # cache内存大小:32mb
cache_store_log /var/log/squid/store.log #Squid的日志1:在/var/log/squid下
cache_access_log /var/log/squid/access.log #Squid的日志2:在/var/log/squid下
cache_log /var/log/squid/cache.log #Squid的日志3:在/var/log/squid下
### cache user
cache_effective_user squid #缓存用户UID
cache_effective_group squid #缓存用户组 GID
### cache admin
visible_hostname proxyserver #发生错误时,生成提示所显示的缓存服务器名
cache_mgr cairt@sippc.com #发生错误时,生成提示所显示的缓存服务器管理员名
####
acl all src 0.0.0.0/0.0.0.0
http_access allow all
#以上2句允许所有ip使用该缓存服务器
acl badwords url_regex -i sex
http_access deny badwords
#以上2句不允许使用该缓存服务器访问URL正则表达式中含sex字样的URL
### httpd 透明代理设置
httpd_accel_host proxy
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
对cache目录进行初始化
# /usr/local/squid/sbin/squid -z
关于Cache目录的建议
由
于cache目录是经常的读写,所以最好硬盘能用SCSI的,速度比较快而且稳定。如果我们的cache大概需要40G的大小,那么我们尽量使用多硬盘,
不要当纯用一个40G的硬盘,可以使用4个10G的硬盘,这样,对于cache的速度更快。比如,当你有10M的东西要写到cache中,如果是只是用一
个硬盘的话,虽然可能你已经将4个cache目录分别放在4个分区,可是你只有一个硬盘,同时只有一个在写入,可是当你有4个硬盘的时候,你每个硬盘就只
要写入2.5M的东西,那样是不是更快呢?
还有,建议将每个cache目录单独存放在一个分区中,分区不要划分太大,一般2至4G就行,这样proxy搜索资料的时候不用耗费太多的时间。
在后台运行
# su squid -c "/usr/local/squid/bin/RunCache &"
检查Squid是否运行
# /usr/local/squid/sbin/squid –k check
关闭
# /usr/local/squid/sbin/squid -k shutdown
要执行两次才能正常关闭suqid
重新读取squid.conf文件
# /usr/local/squid/sbin/squid -k reconfigure
需要执行两次才能重新读取squid.conf文件
设置iptables支持透明代理
# echo "1"> /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-ports 3128
其中192.168.0.0/24表示192.168.0.1-254这个网段通过squid和nat做透明代理。
这样,当用户访问www服务的时候可以使用cache作为高速代理,减少流量,而其他服务则通过nat转发。
2.日志分析
2.1.sarg
# wget http://jaist.dl.sourceforge.net/sourceforge/sarg/sarg-2.0.6.tar.gz
# tar zxvf sarg-2.0.6.tar.gz
# cd sarg-2.0.6
# ./configure --prefix=/usr/local/sarg
# make
# make install
编辑/usr/local/sarg/sarg.conf
# vi /usr/local/sarg/sarg.conf
access_log /var/log/squid/access.log #squid日志文件存放位置
title "Squid 使用报告" #标题
output_dir /var/www/sarg #生成后的html存放到那里,设置到你的网站目录下,以便浏览
overwrite_report no #是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉
生成报告
# sarg
SARG: Records in file: 10249, reading: 100.00%
SARG: Successful report generated on /var/www/sarg/2005Apr28-2005Apr30
可以打开浏览器查看报告了
3.mrtg
net-snmp
安装系统的时候,选择安装
修改/etc/snmp/snmpd.conf,使其能配合mrtg工作
把(去掉注释)
# view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
改成
view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
把
access notConfigGroup "" any noauth exact systemview none none
改成:
access notConfigGroup "" any noauth exact mib2 none none
启动snmpd服务
# service snmpd start
MRTG 2.11.1
# wget http://netmirror.org/mirror/mrtg/mrtg-2.11.1.tar.gz
# tar zxvf mrtg-2.11.1.tar.gz
# cd mrtg-2.11.1
# ./configure --prefix=/usr/local/mrtg \
--with-gd=/usr/include \
--with-gd-lib=/usr/lib \
--with-gd-inc=/usr/include \
--with-png=/usr/include \
--with-zlib=/usr/include
# make
# make install
配置mrtg
# mkdir /var/www/mrtg
# cp images/* /var/www/mrtg
在/usr/local/apache/htdocs/mrtg目录下创建mrtg.cfg文件,并且监控192.168.0.3的地址
# /usr/local/mrtg/bin/cfgmaker --global "WorkDir: /var/www/mrtg" \
--global "Options[_]: growright,bits" \
--ifref=ip \
--output=/usr/local/etc/mrtg.cfg public@192.168.0.3
然后修改mrtg.cfg文件,主要修改以下内容
WorkDir: /var/www/mrtg
Options[_]: growright,bits
Language:GB2312
说明:
这里的--global参数表示后面的选项是对后面指定的设备都是有效的(如果希望对多个设备进行监控时,该参数就会发生作用)。
WorkDir用来指示mrtg的工作目录;
Options用来指定一些特定的选项,这里的growright,bits是用来指定默认options配置的,对于常见的应用来说默认options配置就可以满足需求了。
ifref
用来指示用什么选项来标识设备接口,这里指定使用IP地址来标识网络设备接口。ifref可以指定为
nr、ip、eth、descr、name。nr表示用接口在MIBII库中Interface接口的ifIndex来识别
接口;IP表示使用ip地址识别接口;eth表示使用接口的物理地址标识接口;descr表示使用接口的描述信息来标识接口;name表示使用接口名来标
识接口。一般来说ip地址是唯一 的,但是有些情况下接口是没有IP地址的,例如交换机就会出现这种情况。对于接口来说
nr(接口号)是唯一的,因此对于一般情况使用IP地址就可以了,而对于其他一些情况则需 要采用nr了。
"--output
/usr/local/etc/mrtg.cfg"标识将生成的配置文件存放在/usr/local/etc/目录下。
"public@192.168.0.3"表示监控IP地址为192.168.0.3的设备,采用public作为共同体名通过snmp协议来监控设备
192.168.0.3。
然后
# /usr/local/mrtg/bin/mrtg /usr/local/etc/mrtg.cfg
制作首页index.html
# /usr/local/mrtg/bin/indexmaker --output=/var/www/mrtg/index.html --title=服务器流量统计 /usr/local/etc/mrtg.cfg
定时自动运行mrtg来生成统计信息,默认为五分钟运行一次
# vi /etc/crontab
*/5 * * * * root /usr/local/mrtg/bin/mrtg /usr/local/etc/mrtg.cfg
重新启动snmp和httpd服务
测试
http://192.168.0.3/mrtg
4.squid配置文件详解
# NETWORK OPTIONS(有关的网络选项)
# -----------------------------------------------------------------------------
http_port 192.168.0.3:3128 #代理端口
icp_port 192.168.0.3:3130 #icp端口
# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用于邻居选择算法的有关选项)
#-----------------------------------------------------------------------------
#禁止缓存
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl
#上面几个就是说遇到URL中有包含cgi-bin和以https:\\开头的都不要缓存,
#还有asp、cgi、php等动态脚本也不要缓存,
#因为这些脚本通常都是动态更新的,这样数据不同步。
#还有https://开通的不缓存是因为一般我们进行电子商务交易,
#例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。