linux下利用Squid构建高速的Proxy Server2
# TAG: cache_mgr
cache_mgr webmaster@localhost #管理员信箱
# TAG: cache_effective_user
cache_effective_user squid #运行squid时的用户
cache_effective_group squid #运行squid时的组
# TAG: visible_hostname
visible_hostname ProxyServer #代理服务器名称
# OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache注册服务选项)
# -----------------------------------------------------------------------------
# HTTPD-ACCELERATOR OPTIONS(HTTPD加速选项)
# -----------------------------------------------------------------------------
#设定透明代理
httpd_accel_host ProxyServer #主机名
httpd_accel_port 80 #透明代理端口
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
# MISCELLANEOUS(杂项)
# -----------------------------------------------------------------------------
# TAG: logfile_rotate
#squid会定期的将日志文件更名并打包。
#比如正在使用的日志文件为access.log,squid会将其更名并打包为 access.log.1.gz;
#过了一定时间后,squid又会将access.log.1.gz更名为access.log.2.gz
#并将当前的日志文件更名并打包为access.log.1.gz,以此循环。
#logfile_rotate指定的数字即为打包并备份的文件的数量,当达到这一数目时,
#squid将删除最老的备份文件。默认值为1 0。如果想手动来进行这些操作,
#可以用logfile_rotate 0来取消自动操作。
logfile_rotate 4
# TAG: forwarded_for on|off
#关闭此项将在访问某些论坛时显示的IP是unknown,
#如果打开则显示的是你client的内网IP
forwarded_for off
#图标文件目录
# icon_directory /usr/local/squid/share/icons
#错误提示文件目录
# error_directory /usr/local/squid/share/errors/Simplify_Chinese
# TAG: snmp_port
# Squid can now serve statistics and status information via SNMP.
# By default it listens to port 3401 on the machine. If you don’t
# wish to use SNMP, set this to "0".
#
#Default:
# snmp_port 3401
# TAG: snmp_access
# Allowing or denying access to the SNMP port.
#
# All access to the agent is denied by default.
# usage:
#
# snmp_access allow|deny [!]aclname ...
#
#Example:
# snmp_access allow snmppublic localhost
# snmp_access deny all
#
#Default:
# snmp_access deny all
# DELAY POOL PARAMETERS (all require DELAY_POOLS compilation option)(延时池参数)
# -----------------------------------------------------------------------------
# TAG: coredump_dir
#当squid突然挂掉的时候,或者突然出现什么故障的时候,将squid在内存中的资料写到硬盘中
coredump_dir /usr/local/squid/var/cache3.设置iptables支持透明代理
设置squid+iptables支持透明代理前请先设置好NAT,可以使用下面的简单语句
CODE:echo "1" >; /proc/sys/net/ipv4/ip_forward #设置转发
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE #设置nat功能
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.0/24 --dport 80 -j REDIRECT --to-ports 3128
#将所有80端口的请求都转发到suqid的3128端口上
其中192.168.1.0/24表示192.168.1.1-254这个网段通过squid和nat做透明代理。
这样,当用户访问www服务的时候可以使用cache作为高速代理,减少流量,而其他服务则通过nat转发。
4.使用上层代理
当你访问国外网站比较慢的时候,可以通过设置代理访问,那么我们自己的代理服务器能否也设置别人的代理来访问国外的网站呢?答案是肯定的。
例如有代理proxy1.cnlinux.net能以较快的速度访问国外,且我们访问它也比较快,所以我们用它来作为我们访问国外网站的上层代理。
我们需要在squid.conf中添加如下参数:
CODE:<cache_peer>; <主机名称/地址>; <类别>; <http端口>; <icp端口>; <其他参数>;
类别主要有上层的parent和同一层的sibling两种,我们这里主要介绍的是上层代理,就是parent,如果你需要架设代理服务器集群的话可以采用sibling,这里我们就不做讨论了。
其他参数有:
CODE:proxy-only :只向上层代理要资料,自己不缓存到本地proxy中。
weight=n :比重,当我们设置多台上层代理的时候,这几台代理的功能都相同的,可以通过设置此项来决定那台上层代理比较重要,n越大表示越重要。
no-query :当使用sibling类别的时候,向同一层的proxy索要资料的时候就会向其送出icp请求,可以使用no-query来取消icp请求,一般我们向上层proxy请求资料的时候可以不需要发送icp包,以降低流量。
default :表示将这台proxy设置为默认proxy
no-netdb-exchange :表示不向proxy送出imcp包的请求。
no-digest :表示不纪录向上层proxy提交的请求。
#上层proxy设置
cache_peer proxy1.cnlinux.net parent 3128 3130 no-digest no-netdb-exchange
#设置访问规则,可以用域名,也可以用IP
acl usa dstdomain .com.us #美国.com.us的网站
acl usaip dst 18.0.0.0/8 #美国的部分IP段
#放行禁止规则
cache_peer_access proxy1.cnlinux.net allow usa #允许usa规则使用此上层proxy
cache_peer_access proxy1.cnlinux.net deny !usa #禁止所有非usa规则使用此上层proxy
cache_peer_access proxy1.cnlinux.net allow usaip
cache_peer_access proxy1.cnlinux.net deny !usaip5.启动,关闭squid
a.将cache目录的所有者更改为squid
CODE:#chown -R squid:squid /Cache1
#chown -R squid:squid /Cache2
b.对cache目录进行初始化
CODE:#/usr/local/squid/sbin/squid -z
2004/11/01 23:06:29| Creating Swap Directories
FATAL: Failed to make swap directory /Cache1/00: (13) Permission denied
Squid Cache (Version 2.5.STABLE7): Terminated abnormally.
CPU Usage: 0.000 seconds = 0.000 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 10
如果出现上面这样的错误信息,表示你/Cache1目录权限错误,请检查/Cache1目录所有者是否为squid用户所有。
c.启动squid
CODE:#su squid -c "/usr/local/squid/bin/RunCache &"
d.关闭squid
CODE:#/usr/local/squid/sbin/squid -k shutdown
要执行两次才能正常关闭suqid
e.重新读取squid.conf文件
CODE:#/usr/local/squid/sbin/squid -k reconfigure
需要执行两次才能重新读取squid.conf文件
6.日志分析
Proxy服务器安装好后,我们当然要对服务器进行监控,通过日志分析,我们可以知道那些用户上了那些网站,用了多少流量等,下面为大家介绍sarg这个日志分析工具,在squid的官方网站还推介了其他几种日志分析工具,大家有兴趣的话可以上去看看。
a.安装
CODE:#./configure --prefix=/usr/local/sarg --enable-bindir=/usr/local/sarg/bin
#make && make install
b.设置sarg.conf文件
CODE:#vi /usr/local/sarg/sarg.conf
language language English #由于官方网站还没有发布中文版,所以我们就使用英文好了,那位有兴趣可以自己翻译一下
access_log /usr/local/squid/var/logs/access.log.0 #squid日志文件存放位置
title "Squid 使用报告" #标题
temporary_dir /tmp #临时目录
output_dir /var/www/html/sarg #生成后的html存放到那里,设置到你的网站目录下,以便浏览
overwrite_report no #是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉
mail_utility mail
topsites_num 100
exclude_codes /usr/local/sarg/exclude_codes
max_elapsed 28800000
charset GB2312 #字符集
c.生成报告
设置好sarg.conf文件后,执行
CODE:#/usr/local/sarg/bin/sarg
将提示:SARG: Successful report generated on /usr/local/apache/htdocs/sarg/2004Oct31-2004Nov01
表示报告生成成功,还有报告存放位置,可以马上打开您的浏览器查看报告了。
三、关于Cache目录的建议
由于cache目录是经常的读写,所以最好硬盘能用SCSI的,速度比较快而且稳定。如果我们的cache大概需要40G的大小,那么我们尽量使用多硬盘,不要当纯用一个40G的硬盘,可以使用4个10G的硬盘,这样,对于cache的速度更快。比如,当你有10M的东西要写到cache中,如果是只是用一个硬盘的话,虽然可能你已经将4个cache目录分别放在4个分区,可是你只有一个硬盘,同时只有一个在写入,可是当你有4个硬盘的时候,你每个硬盘就只要写入2.5M的东西,那样是不是更快呢?