squid完全攻略 squid优化后详细安装步骤

来源:互联网 发布:月度数据分析报告模板 编辑:程序博客网 时间:2024/04/30 15:27
Squid工作原理
http://os.51cto.com/art/201009/225813.htm
http://os.51cto.com/art/201009/223455.htm
Squid是Linux下一个缓存Internet数据的代理服务器软件,它接收用户的下载申请并自动处理所下载的数据。即当一个用户下载www.idcshare的页面,他请求squid为他取得这个页面,suqid会连接到申请www.idcshare的网站并请求该主页,接着把主页传给用户并自己保留一份.当下一次有其他用户请求同样页面时,squid会从磁盘中读到保存那份,这样数据就会迅速传输到用户的机器上.
 
Squid支持以下协议
1) 客户端协议:HTTP .FTP.Gopher.WAIS.SSL
2) 缓存及管理协议:ICP(Internet Cache协议). HTCP(超文本缓冲协议).SNNP. Cache Digests
 
运行流程图:

squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 1) Client端向Server端发送一个资料需求封包;
2) Server端接收之后,先比对这个封包的『来源』与预计要前往的『目标』网站是否为可接受?如果来源与目标都是合法的,或者说,来源与目标网站我们的Proxy都能帮忙取得资料时,那么Server端会预计开始替Client取得资料。
3) Server首先会到自己的硬碟里面,也就是所谓的cache 查看一下有没有Client端所需要的资料,如果有的话,那就将资料直接送到Client端而不经过向Internet要求资料的程序;
4) 将数据传回给客户端使用
5)在经过1, 2, 3查寻知道cache没有资料,或者资料过期之后, Proxy会向Internet上面的目标网站要求资料;
6)在将资料取回之后, proxy会先将取得的资料『储存一份到cache当中』;
7)最后才将资料传回给Client端使用。
 
代理服务器优点与类型
优点:
1)       通过缓存增加访问速度
2)       提供用私有ip访问internet的方法
3)       提高网络的安全性
4)       方便对用户的管理
类型:
1) 标准代理服务器

squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 2) 透明代理服务器

squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 3) 反向代理服务器

squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 安装前期准备工作
1)源代码编译优化
一般情况下,优化参数都是通过export命令设定CFLAGSCXXFLAGS,然后configure的时候会自动读入,make的时候会自动使用所选的优化参数。通过添加优化参数,让程序针对某个CPU型号和某个系统进行最大优化,减少文件大小、CPU使用率、内存使用率。优化后的程序,将不再具有跨系统跨平台的能力。
首先查看CPU信息,然后根据CPU信息到http://gentoo-wiki.com/Safe_Cflags去获取CPU优化参数
技巧:直接是打不开http://gentoo-wiki.com/Safe_Cflagshttp://www.proxyie.cn/输入http://gentoo-wiki.com,打开后点左侧栏的搜索,输入cpu,要翻墙,打开
如下图:
 
squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 [root@server soft]# cat /proc/cpuinfo |more  
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Xeon(R) CPU           E5420 @ 2.50GHz
stepping        : 10
cpu MHz         : 2493.978
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush d
ts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr
lahf_lm
bogomips        : 4987.95
 
由于服务器model name 是Intel(R) Xeon(R) CPU,我选择如下图:
squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 配置:
[root@server soft]#export CHOST="i686-pc-linux-gnu"
[root@server soft]#export CFLAGS="-march=Prescott -O2 -pipe -fomit-frame-pointer"
[root@server soft]#export CXXFLAGS="${CFLAGS}"
[root@server soft]#env

squid完全攻略(一)squid优化后详细安装步骤 - zhuzhu - 津津计较
 查看设置环境变量是否生效
红色标记,说明生效了.
 
3)修改描述符参数值
文件描述符用来限制一个程序能同时打开的文件数目,默认是1024。也就是说,如果不修改文件描述符,那么一个程序只能同时打开1024个文件,而Squid会同时打开成千上万个文件,所以远远是不够的,为了保证最高的效率和响应速度,要更改文件描述符的大小.
两种情况:a.用户每次访问squidsquid会按照需要打开文件,然后读取文件内容再返回给用户。
b.squid预先打开访问频率高的文件,用户访问squidsquid直接把内容返回给用户。相对来说,后面的方法可以对用户的请求进行更加快的反应。
首先修改以下两个文件。
/usr/include/bits/typesizes.h
/usr/include/linux/posix_types.h

vi打开上面的文件查找
#define __FD_SETSIZE 1024
1024改为65536,然后保存,这是Linux能接受的最大数值。

刚才编辑的这两个文件是C/C++程序里面的头文件,编译squid的时候会被自动引用。除了这两个文件以外,我们还需要对当前环境进行设置。也就是你用ssh登录到系统时的一些设定。每个登录进程都可以进行单独的设置,当关闭目前登录回话,环境变量的设置就失效了.
ulimit用来设置当前环境的一些资源限制。这个命令是对环境进行设置,所以退出当前登录进程后命令将会失效。
我们输入下面的命令
[root@server soft]#ulimit -Hs 65536
[root@server soft]#ulimit -n 65536
也可以永久修改这些限制,开机自动生效,配置如下:
vi /etc/security/limits.conf,添加以下内容
*                soft   nofile          65536 
*                hard   nofile          65536
H参数是硬性限制,s是堆栈上限,n是文件描述符上限。
注释:
ulimit 参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
安装与配置
安装
[root@server soft]# wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE24.tar.gz
[root@server soft]# tar -zxvf squid-3.0.STABLE24.tar.gz
[root@server soft]# cd squid-3.0.STABLE24
[root@serversquid-3.0.STABLE24]#./configure --prefix=/usr/local/squid\--enable-gnuregex\--enable-icmp\--enable-linux-netfilter\--enable-default-err-language="Simplify_Chinese"\--enable-kill-parent-hack\--enable-cache-digests\--enable-dlmalloc\--enable-poll\--enable-async-io=240\--enable-delay-pools\--with-filedescriptors=65536\--enable-snmp\--enable-arp-acl\--mandir=/usr/share/man/--with-large-files
 
注释
可以用命令查看
[root@viong squid-3.0.STABLE24]# ./configure --help
--enable-gnuregex
在访问控制列表和其他配置指令里,squid使用正则表达式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,比如在proxy未来的规划当中。可能利用到正则表示法的方式来抵挡一些恶意的网站,你可以将这个选项加到./configure命令后.
--enable-icmp
squid能利用ICMP消息来确定回环时间尺寸,非常象ping程序。你能使用该选项来激活这些功能。
--enable-linux-netfilter
Netfilter是linux 2.4系列内核的包过滤器名字。假如你想在linux2.4或以后的版本中使用HTTP拦截功能,那么激活该选项。
--enable-default-err-language=lang
该选项设置error_directory指令的默认值。例如,假如你想使用荷兰语,你能这样指定:
% ./configure --enable-default-err-language=Dutch
你也能在squid.conf里指定error_directory指令,在附录A中有描述。假如你忽略该选项,英语是默认错误语言。
--enable-kill-parent-hack
在我们关掉squid的时候,连同parent process 一起关掉
--enable-cache-digests
Cache消化是ICP的另一个替代,但有着截然不同的特性
--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。
--enable-poll
unix提供两个相似的函数用以在I/O事件里扫描开放文件描述符:select()和poll()../configure脚本通常能非常好的计算出何时使用poll()来代替select().假如你想强制使用poll(),那么指定该选项。
 
--enable-async-io[=N_THREADS]
异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。如果网站的服务器配置很高,可以尝试将这个数字改为160以上。如果是小网站的话,可以考虑降低到40左右.
请注意--enable-async-io是打开其他三个./configure选项的快捷方式,它等同于:
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
 
--enable-delay-pools
延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工
 --with-filedescriptors=65536
支持最大文件描述符
--enable-snmp
简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库。
--enable-arp-acl
允许基于MAC地址的存取过滤
--mandir=/usr/share/man
指定man的安装目录
--with-large-files
让log支持大于2G
 
[root@server squid-3.0.STABLE24]# make; make install
make[3]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'
make[2]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'
make[1]: Leaving directory `/root/soft/squid-3.0.STABLE24/tools'
make[1]: Entering directory `/root/soft/squid-3.0.STABLE24'
Build Successful.
make[2]: Entering directory `/root/soft/squid-3.0.STABLE24'
make[2]: Nothing to be done for `install-exec-am'.==================说明安装成功
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/soft/squid-3.0.STABLE24'
make[1]: Leaving directory `/root/soft/squid-3.0.STABLE24'
[root@server squid-3.0.STABLE24]#        
[root@server squid-3.0.STABLE24]# ll /usr/local/squid--enable-gnuregex/
总计 24
drwxr-xr-x 2 root root 4096 03-04 23:35 bin
drwxr-xr-x 2 root root 4096 03-04 23:35 etc
drwxr-xr-x 2 root root 4096 03-04 23:35 libexec
drwxr-xr-x 2 root root 4096 03-04 23:35 sbin
drwxr-xr-x 5 root root 4096 03-04 23:35 share
drwxr-xr-x 3 root root 4096 03-04 23:35 var
bin/ :放置主要的squid执行scripts的目录,重要的是RunCache那个档案;
etc/ :几乎所有的squid设定档都在这里;
libexec/ :一些函式库;
sbin/ :重要的就是那个squid的执行档!
share/ :一些错误讯息代码表示档案,以及一些小图示放置的目录;
var/ :预设是放置log file的,不过我不喜欢放在这里,这点等一下我们会修改的!
第一次运行squid时,要先设置/usr/local/squid/var权限,还有在/usr/local/squid/etc/squid.conf添加主机,visible_hostnam viong 并制定http_port 端口号.这里预设个80
 
[root@server squid-3.0.STABLE24]# chown -R nobody:nobody /usr/local/squid/var
 
[root@server squid-3.0.STABLE24]# /usr/local/squid/sbin/squid –zD
首次运行squid需要初始化cache,由于squid要验证其DNS可用才能启动,目前都没配置,所以我先禁用初始化DNS测试,先让squid启动
Squid[root@viong soft]# netstat -ntpl |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN    
[root@server squid-3.0.STABLE24]# /usr/local/squid/bin/squidclient -p 80 -h localhost mgr:info
取得squid运行状态信息
HTTP/1.0 200 OK
Server: squid/3.0.STABLE24
Mime-Version: 1.0
Date: Fri, 05 Mar 2010 14:43:26 GMT
Content-Type: text/plain
Expires: Fri, 05 Mar 2010 14:43:26 GMT
Last-Modified: Fri, 05 Mar 2010 14:43:26 GMT
X-Cache: MISS from viong
Via: 1.0 viong (squid/3.0.STABLE24)
Proxy-Connection: close
 
Squid Object Cache: Version 3.0.STABLE24
Start Time:     Fri, 05 Mar 2010 14:42:48 GMT
Current Time:   Fri, 05 Mar 2010 14:43:26 GMT
Connection information for squid:
        Number of clients accessing cache:      1
        Number of HTTP requests received:       0
        Number of ICP messages received:        0
        Number of ICP messages sent:    0
        Number of queued ICP replies:   0
        Number of HTCP messages received:       0
        Number of HTCP messages sent:   0
        Request failure ratio:   0.00
        Average HTTP requests per minute since start:   0.0
        Average ICP messages per minute since start:    0.0
        Select loop called: 8659 times, 4.376 ms avg
Cache information for squid:
        Hits as % of all requests:      5min: 0.0%, 60min: 0.0%
        Hits as % of bytes sent:        5min: -0.0%, 60min: -0.0%
        Memory hits as % of hit requests:       5min: 0.0%, 60min: 0.0%
        Disk hits as % of hit requests: 5min: 0.0%, 60min: 0.0%
        Storage Swap size:      0 KB
        Storage Swap capacity:   0.0% used, 100.0% free
        Storage Mem size:       104 KB
        Storage Mem capacity:    1.3% used, 98.7% free
        Mean Object Size:       0.00 KB
        Requests given to unlinkd:      0
Median Service Times (seconds) 5 min    60 min:
        HTTP Requests (All):   0.00000 0.00000
        Cache Misses:          0.00000 0.00000
        Cache Hits:            0.00000 0.00000
        Near Hits:             0.00000 0.00000
        Not-Modified Replies: 0.00000 0.00000
        DNS Lookups:           0.00000 0.00000
        ICP Queries:           0.00000 0.00000
Resource usage for squid:
        UP Time:        37.890 seconds
        CPU Time:       0.070 seconds
        CPU Usage:      0.18%
        CPU Usage, 5 minute avg:        0.00%
        CPU Usage, 60 minute avg:       0.00%
        Process Data Segment Size via sbrk(): 2784 KB
        Maximum Resident Size: 0 KB
        Page faults with physical i/o: 0
Memory usage for squid via mallinfo():
        Total space in arena:    3052 KB
        Ordinary blocks:         2938 KB      1 blks
        Small blocks:               0 KB      0 blks
        Holding blocks:          1520 KB      8 blks
        Free Small blocks:          0 KB
        Free Ordinary blocks:     113 KB
        Total in use:            4458 KB 98%
        Total free:               113 KB 2%
        Total size:              4572 KB
Memory accounted for:
        Total accounted:         1886 KB 41%
        memPool accounted:       1886 KB 41%
        memPool unaccounted:     2685 KB 59%
        memPoolAlloc calls:      1504
        memPoolFree calls:        481
File descriptor usage for squid:
        Maximum number of file descriptors:  65536  =============文件描述符
        Largest file desc currently in use:     16
        Number of file desc currently in use:   10
        Files queued for open:                   0
        Available number of file descriptors: 1014
        Reserved number of file descriptors:   100
        Store Disk files open:                   0
Internal Data Structures:
            26 StoreEntries
            26 StoreEntries with MemObjects
            25 Hot Object Cache Items
             0 on-disk objects
注释:
Squidclient参数:
取得squid运行状态信息: squidclient -p 80 mgr:info
取得squid内存使用情况: squidclient -p 80 mgr:mem
取得squid已经缓存的列表: squidclient -p 80 mgr:objects
取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
 
为了不每次输ulimit -HSn 65536 ,squid指定个启动脚本,复制一下脚本保存为squid.sh
#!/bin/sh
#
ulimit -HSn 65536
# starts and stops Squid
case "$1" in
start)
          /usr/local/squid/sbin/squid -s
          echo -n ' Squid'
          ;;
stop)
          /usr/local/squid/sbin/squid -k shutdown

          ;;
esac
 
以后启动或者停止squid,直接运行一下命令
[root@viong soft]# sh squid.sh stop     
[root@viong soft]# sh squid.sh start  
 

-a port

指定新的http_port 值。该选项覆盖了来自squid.conf 的值。然而请注意,你能在squid.conf里指定多个值。-a 选项仅仅覆盖配置文件里的第一个值。(该选项使用字母a 是因为在Harvest cache 里,HTTP 端口被叫做ASCII 端口)
 
-d level
让squid 将它的调试信息写到标准错误(假如配置了,就是cache.log 和syslog)。level参数指定了显示在标准错误里的消息的最大等级。在多数情况下,d1 工作良好。请见16.2章关于调试等级的描述。
 
-f file
指定另一个配置文件。
 
-h
显示用法。
 
-k function
指示squid 执行不同的管理功能。功能参数是下列之一:reconfigure,rotate,shutdown,interrupt,kill,debug,check,or parse。
+ reconfigure 导致运行中的squid 重新读取配置文件。
+ rotate导致squid 滚动它的日志,这包括了关闭日志,重命名,和再次打开它们。
+ shutdown 发送关闭squid 进程的信号。
+ interrupt 立刻关闭squid,不必等待活动会话完成。
+ kill 发送KILL 信号给squid,这是关闭squid 的最后保证。
+ debug 将squid 设置成完全的调试模式,假如你的cache 很忙,它能迅速的用完你的磁盘空间。
+ check 简单的检查运行中的squid 进程,返回的值显示squid 是否在运行。
+ 最后,parse 简单的解析squid.conf 文件,如果配置文件包含错误,进程返回非零值。
 
-s
激活将日志记录到syslog 进程。squid 使用LOCAL4 syslog 设备。0 级别调试信息以优先级LOG_WARNING 被记录,1 级别消息以LOG_NOTICE 被记录。更高级的调试信息不会被发送到syslogd.你可以在/etc/syslogd.conf 文件里使用如下接口:
local4.warning /var/log/squid.log
 
-u port
指定另一个ICP 端口号,覆盖掉squid.conf 文件里的icp_port。
 
-v
打印版本信息。
 
-z
初始化cache,或者交换,目录。在首次运行squid,或者增加新的cache 目录时,你必须使用该选项。
 
-C
阻止安装某些信号句柄,它们捕获特定的致命信号例如SIGBUS 和SIGSEGV。正常的,这些信号被squid 捕获,以便它能干净的关闭。然而,捕获这些信号可能让以后调试问题困难。使用该选项,致命的信号导致它们的默认动作,通常是coredump。
 
-D
禁止初始化DNS 测试。正常情况下,squid 直到验证它的DNS 可用才能启动。该选项阻止了这样的检测。你也能在squid.conf 文件里改变或删除dns_testnames 选项。
 
-F
让squid 拒绝所有的请求,直到它重新建立起存储元数据。假如你的系统很忙,该选项可以减短重建存储元数据的时间。然而,如果你的cache 很大,重建过程可能会花费很长的时间。
 
-N
阻止squid 变成后台服务进程。
 
-R
阻止squid 在绑定HTTP 端口之前使用SO_REUSEADDR 选项。
 
-V
激活虚拟主机加速模式。类似于squid.conf 文件里的httpd_accel_host virtual 指令。
 
-X
强迫完整调试模式,如你在squid.conf 文件里指定debug_options ALL,9 一样。
 
-Y
在重建存储元数据时,返回ICP_MISS_NOFETCH 代替ICP_MISS.忙碌的父cache 在重建时,该选项可以导致最少的负载。请见10.6.1.2 章。
 
  对配置文件查错
 
在开启squid 之前,你应该谨慎的验证配置文件。这点容易做到,运行如下命令即可:
%squid -k parse
 
假如你看不到输出,配置文件有效,你能继续后面的步骤。
 
然而,如果配置文件包含错误,squid 会告诉你:
squid.conf line 62: http_access allow okay2
aclParseAccessLine: ACL name 'okay2' not found.
 
这里你可以看到,62 行的http_access 指令指向的ACL 不存在。有时候错误信息很少:
FATAL: Bungled squid.conf line 76: memory_pools
 
在这个情形里,我们忘记了在76 行的memory_pools 指令后放置on 或off。
 
建议你养成习惯:在每次修改配置文件后,使用squid -k parse。假如你不愿麻烦,并且你的配置文件有错误,squid 会告诉你关于它们而且拒绝启动。假如你管理着大量的cache,也许你会编辑脚本来自动启动,停止和重配置squid。你能在脚本里使用该功能,来确认配置文件是有效的。
 
 
初始化cache 目录
 
在初次运行squid 之前,或者无论何时你增加了新的cache_dir,你必须初始化cache 目录。命令很简单:
%squid –z
 
对UFS 相关的存储机制(ufs,aufs,and diskd;见第8 章),该命令在每个cache_dir 下面创建了所需的子目录。你不必担心squid 会破坏你的当前cache 目录(如果有的话)。
 
在该阶段属主和许可权是通常遇到的问题。squid 在特定的用户ID 下运行,这在squid.conf 文件里的cache_effective_user 里指定。用户ID 必须对每个cache_dir 目录有读和写权限。否则,你将看到如下信息:
Creating Swap Directories
FATAL: Failed to make swap directory /usr/local/squid/var/cache/00:
(13) Permission denied
 
在这样的情形下,你该确认/usr/local/squid/var/cache 目录的所有组成都可被squid.conf给定的用户ID 访问。最终的组件--cache 目录--必须对该用户ID 可写。
 
cache 目录初始化可能花费一些时间,依赖于cache 目录的大小和数量,以及磁盘驱动器的速度。假如你想观察这个过程,请使用-X 选项:
%squid –zX
 
 
在终端窗口里测试squid
 
一旦你已经初始化cache 目录,就可以在终端窗口里运行squid,将日志记录到标准错误。这样,你能轻易的定位任何错误或问题,并且确认squid 是否成功启动。使用-N 选项来保持squid 在前台运行,-d1 选项在标准错误里显示1 级别的调试信息。
%squid -N -d1
 
你将看到类似于以下的输出:
2003/09/29 12:57:52| Starting Squid Cache
version 2.5.STABLE4 for i386-unknown-freebsd4.8...
2003/09/29 12:57:52| Process ID 294
2003/09/29 12:57:52| With 1064 file descrīptors available
2003/09/29 12:57:52| DNS Socket created on FD 4
2003/09/29 12:57:52| Adding nameserver 206.107.176.2 from /etc/resolv.conf
2003/09/29 12:57:52| Adding nameserver 205.162.184.2 from /etc/resolv.conf
2003/09/29 12:57:52| Unlinkd pipe opened on FD 9
2003/09/29 12:57:52| Swap maxSize 102400 KB, estimated 7876 objects
2003/09/29 12:57:52| Target number of buckets: 393
2003/09/29 12:57:52| Using 8192 Store buckets
2003/09/29 12:57:52| Max Mem size: 8192 KB
2003/09/29 12:57:52| Max Swap size: 102400 KB
2003/09/29 12:57:52| Rebuilding storage in /usr/local/squid/var/cache (DIRTY)
2003/09/29 12:57:52| Using Least Load store dir selection
2003/09/29 12:57:52| Set Current Directory to /usr/local/squid/var/cache
2003/09/29 12:57:52| Loaded Icons.
2003/09/29 12:57:52| Accepting HTTP connections at 0.0.0.0, port 3128, FD 11.
2003/09/29 12:57:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 12.
2003/09/29 12:57:52| WCCP Disabled.
2003/09/29 12:57:52| Ready to serve reques
 
假如你看到错误消息,你该首先修正它。请检查输出信息的开始几行以发现警告信息。最普通的错误是文件/目录许可问题,和配置文件语法错误。假如你看到一条不引起注意的错误消息,请见16 章中关于squid 故障处理的建议和信息。如果还不行,请检查squid FAQ,或查找邮件列表来获得解释。
 
一旦你见到"Ready to serve requests"消息,就可用一些HTTP 请求来测试squid。配置你的浏览器使用squid 作为代理,然后打开某个web 页面。假如squid 工作正常,页面被迅速载入,就象没使用squid 一样。另外,你可以使用squidclient 程序,它随squid 发布:
% squidclient http://www.squid-cache.org/
 
假如它正常工作,squid 的主页html 文件会在你的终端窗口里滚动。一旦确认squid 工作正常,你能中断squid 进程(例如使用ctrl-c)并且在后台运行squid。
 
 
 将squid 作为服务进程运行
 
正常情况下你想将squid 以后台进程运行(不出现在终端窗口里)。最容易的方法是简单执行如下命令:
%squid –s
 
-s 选项导致squid 将重要的状态和警告信息写到syslogd。squid 使用LOCAL4 设备,和LOG_WARNING 和LOG_NOTICE 优先权。syslog 进程实际可能会或不会记录squid 的消息,这依赖于它被如何配置。同样的消息被写进cache.log 文件,所以假如你愿意,忽略-s 选项也是安全的。
 
当你不使用-N 选项来启动squid,squid 自动在后台运行并且创建父/子进程对。子进程做所有的实际工作。父进程确认子进程总在运行。这样,假如子进程意外终止,父进程启动另外一个子进程以使 squid 正常工作。通过观察syslog 消息,你能看到父/子进程交互作用。
Jul 31 14:58:35 zapp squid[294]: Squid Parent: child process 296 started
 
这里显示的父进程ID 是294,子进程是296。当你查看ps 的输出,你可以看到子进程以(squid)形式出现:
%ps ax | grep squid
294 ?? Is 0:00.01 squid -sD
296 ?? S 0:00.27 (squid) -sD (squid)
 
假如squid 进程意外终止,父进程启动另一个。例如:
Jul 31 15:02:53 zapp squid[294]: Squid Parent: child process 296 exited due to signal 6
Jul 31 15:02:56 zapp squid[294]: Squid Parent: child process 359 started
 
在某些情形下,squid 子进程可能立即终止。为了防止频繁的启动子进程,假如子进程连续5 次没有运行至少10 秒钟,父进程会放弃。
Jul 31 15:13:48 zapp squid[455]: Squid Parent: child process 474 exited with status 1
Jul 31 15:13:48 zapp squid[455]: Exiting due to repeated, frequent failures
 
如果发生这样的事,请检查syslog 和squid 的cache.log 以发现错误。
 
 
squid_start 脚本
 
当squid 以后台进程运行时,它查找squid 执行程序目录下的名为squid_start 的文件。假如发现,该程序在父进程创建子进程之前被执行。你能使用该脚本完成特定的管理任务,例如通知某人squid 在运行,管理日志文件等。除非squid_start 程序存在,squid 不会创建子进程。
 
squid_start 脚本在你使用绝对或相对路径启动squid 时才开始工作。换句话说,squid 不使用PATH 环境变量来定位squid_start.这样,你应该养成习惯这样启动squid:
% /usr/local/squid/sbin/squid –sD
 
而不要这样:
%squid –sD
 
 
启动脚本
 
通常你希望squid 在每次计算机重启后自动启动。对不同的操作系统,它们的启动脚本如何工作也很不同。我在这里描述一些通用的环境,但对你自己的特殊操作系统,也许该有特殊的处理方法。
 
 
 /etc/rc.local
 
最容易的机制之一是/etc/rc.local 脚本。这是个简单的shell 脚本,在每次系统启动时以root 运行。使用该脚本来启动squid 非常容易,增加一行如下:
/usr/local/squid/sbin/squid –s
 
当然你的安装位置可能不同,还有你可能要使用其他命令行选项。不要在这里使用-N选项。
 
假如因为某些理由,你没有使用cache_effective_user 指令,你可以尝试使用su 来让squid以非root 用户运行:
/usr/bin/su nobody -c '/usr/local/squid/sbin/squid -s'
 
 
 init.d 和rc.d
 
init.d 和rc.d 机制使用独立的shell 脚本来启动不同的服务。这些脚本通常在下列目录之中:/sbin/init.d, /etc/init.d, /usr/local/etc/rc.d.脚本通常获取单一命令行参数,是start 或stop。某些系统仅仅使用start 参数。如下是启动squid 的基本脚本:
#!/bin/sh
# this scrīpt starts and stops Squid
case "$1" in
start)
/usr/local/squid/sbin/squid -s
echo -n ' Squid'
;;
stop)
/usr/local/squid/sbin/squid -k shutdown
;;
esac
 
Linux 用户可能在启动squid 之前需要设置文件描述符限制。例如:
echo 8192 >; /proc/sys/fs/file-max
limit -HSn 8192
 
为了使用该脚本,先找到脚本存放的目录。给它一个有意义的名字,类似于其他的系统启动脚本。可以是S98squid 或squid.sh。通过重启计算机来测试该脚本,而不要假想它会正常工作。
 
 
/etc/inittab
 
某些操作系统支持另一种机制,是/etc/inittab 文件。在这些系统中,init 进程启动和停止基于运行等级的服务。典型的inittab 接口类似如此:
sq:2345nce:/usr/local/squid/sbin/squid –s
 
使用该接口,init 进程启动squid 一次并且随后忘记它。squid 确认它驻留在运行状态,象前面描述的一样。或者,你能这样做:
sq:2345:respawn:/usr/local/squid/sbin/squid
 
–Ns
 
这里我们使用了respawn 选项,假如进程不存在init 会重启squid。假如使用respawn,请确认使用-N 选项。
 
在编辑完inittab 文件后,使用下面的命令来使init 重新读取它的配置文件和启动squid:
# init q
 
 
chroot 环境
 
某些人喜欢在chroot 环境运行squid。这是unix 的功能,给予进程新的root 文件系统目录。在squid 受安全威胁时,它提供额外等级的安全保护。假如攻击者在某种程度上通过squid获取了对操作系统的访问权,她仅仅能访问在chroot 文件系统中的文件。在chroot 树之外的系统文件,她不可访问。
 
最容易在chroot 环境里运行squid 的方法是,在squid.conf 文件里指定新的root 目录,如下:
chroot /new/root/directory
 
chroot()系统调用需要超级用户权限,所以你必须以root 来启动squid。
 
chroot 环境不是为unix 新手准备的。它有点麻烦,因为你必须在新的root 目录里重复放置大量的文件。例如,假如默认的配置文件正常在/usr/local/squid/etc/squid.conf,并且你使用chroot 指令,那么文件必须位于/new/root/directory/usr/local/squid/etc/squid.conf.你必须将位于$ prefix/etc,$prefix/share,$prefix/libexec 下的所有文件拷贝到chroot 目录。请确认$prefix/var 和cache 目录在chroot 目录中存在和可写。
 
同样的,你的操作系统需要将大量的文件放在chroot 目录里,例如/etc/resolv.conf 和/dev/null.假如你使用外部辅助程序,例如重定向器(见11 章)或者验证器(见12 章),你也需要来自/usr/lib 的某些共享库。你可以使用ldd 工具来查找给定的程序需要哪些共享库:
% ldd /usr/local/squid/libexec/ncsa_auth
/usr/local/squid/libexec/ncsa_auth:
libcrypt.so.2 =>; /usr/lib/libcrypt.so.2 (0x28067000)
libm.so.2 =>; /usr/lib/libm.so.2 (0x28080000)
libc.so.4 =>; /usr/lib/libc.so.4 (0x28098000)
 
你可以使用chroot 命令来测试辅助程序:
# chroot /new/root/directory /usr/local/squid/libexec/ncsa_auth
/usr/libexec/ld-elf.so.1: Shared object "libcrypt.so.2" not found
 
更多的关于chroot 的信息,请见你系统中chroot()的manpage。
 
 
 停止squid
 
最安全的停止squid 的方法是使用squid -k shutdown 命令:
%squid -k shutdown
 
该命令发送TERM 信号到运行中的squid 进程。在接受到TERM 信号后,squid 关闭进来的套接字以拒收新请求。然后它等待一段时间,用以完成外出请求。默认时间是30 秒,你可以在shutdown_lifetime 指令里更改它。
假如因为某些理由,squid.pid 文件丢失或不可读,squid -k 命令会失败。在此情形下,你可以用ps 找到squid 的进程ID,然后手工杀死squid。例如:
%ps ax |grep squid
 
假如你看到不止一个squid 进程,请杀死以(squid)显示的那个。例如:
% ps ax | grep squid
294 ?? Is 0:00.01 squid -sD
296 ?? S 0:00.27 (squid) -sD (squid)
% kill -TERM 296
 
在发送TERM 信号后,你也许想查看日志,以确认squid 已关闭:
% tail -f logs/cache.log
2003/09/29 21:49:30| Preparing for shutdown after 9316 requests
2003/09/29 21:49:30| Waiting 10 seconds for active connections to finish
2003/09/29 21:49:30| FD 11 Closing HTTP connection
2003/09/29 21:49:31| Shutting down...
2003/09/29 21:49:31| FD 12 Closing ICP connection
2003/09/29 21:49:31| Closing unlinkd pipe on FD 9
2003/09/29 21:49:31| storeDirWriteCleanLogs: Starting...
2003/09/29 21:49:32| Finished. Wrote 253 entries.
2003/09/29 21:49:32| Took 0.1 seconds (1957.6 entries/sec).
2003/09/29 21:49:32| Squid Cache (Version 2.5.STABLE4): Exiting normally.
 
假如你使用squid -k interrupt 命令,squid 立即关闭,不用等待完成活动请求。这与在kill 里发送INT 信号相同。
 
 
重配置运行中的squid 进程
 
在你了解了更多关于squid 的知识后,你会发现对squid.conf 文件做了许多改动。为了让新设置生效,你可以关闭和重启squid,或者在squid 运行时,重配置它。
 
重配置运行中的squid 最好的方法是使用squid -k reconfigure 命令:
%squid -k reconfigure
 
当你运行该命令时,HUP 信号被发送到运行中的squid 进程。然后squid 读取和解析squid.conf 文件。假如操作成功,你可以在cache.log 里看到这些:
2003/09/29 22:02:25| Restarting Squid Cache (version 2.5.STABLE4)...
2003/09/29 22:02:25| FD 12 Closing HTTP connection
2003/09/29 22:02:25| FD 13 Closing ICP connection
2003/09/29 22:02:25| Cache dir '/usr/local/squid/var/cache' size remains unchanged
at 102400 KB
2003/09/29 22:02:25| DNS Socket created on FD 5
2003/09/29 22:02:25| Adding nameserver 10.0.0.1 from /etc/resolv.conf
2003/09/29 22:02:25| Accepting HTTP connections at 0.0.0.0, port 3128, FD 9.
2003/09/29 22:02:25| Accepting ICP messages at 0.0.0.0, port 3130, FD 11.
2003/09/29 22:02:25| WCCP Disabled.
2003/09/29 22:02:25| Loaded Icons.
2003/09/29 22:02:25| Ready to serve requests.
 
在使用reconfigure 选项时你须谨慎,因为所做的改变可能会导致致命错误。例如,请注意squid 关闭和重新打开进来的HTTP 和ICP 套接字;假如你将http_port 改变为squid 不能打开的端口,它会发生致命错误并退出。
 
在squid 运行时,某些指令和和选项不能改变,包括:
+ 删除cache 目录(cache_dir 指令)
+ 改变store_log 指令
+ 改变coss cache_dir 的块大小数值。事实上,无论何时你改变了该值,你必须重新初始化coss cache_dir。
+ coredump_dir 指令在重配置过程中不被检查。所以,在squid 已经启动了后,你不能让squid 改变它的当前目录。
 
solaris 用户在重配置squid 过程中可能遇到其他问题。solaris 的stdio 执行组件里的fopen()调用要求使用小于256 的未用文件描述符。FILE 结构以8 位值存储该文件描述符。正常情况下这不构成问题,因为squid 使用底层I/O(例如open())来打开cache 文件。然而,在重配置过程中的某些任务使用fopen(),这就有可能失败,因为前面的256 个文件描述符已被分配出去。
 
滚动日志文件
 
除非你在squid.conf 里禁止,squid 会写大量的日志文件。你必须周期性的滚动日志文件,以阻止它们变得太大。squid 将大量的重要信息写入日志,假如写不进去了,squid 会发生错误并退出。为了合理控制磁盘空间消耗,在cron 里使用如下命令:
%squid -k rotate
 
例如,如下任务接口在每天的早上4 点滚动日志:
0 4 * * * /usr/local/squid/sbin/squid -k rotate
 
该命令做两件事。首先,它关闭当前打开的日志文件。然后,通过在文件名后加数字扩展名,它重命名cache.log,store.log,和 access.log。例如,cache.log 变成cache.log.0,cache.log.0变成cache.log.1,如此继续,滚动到logfile_rotate 选项指定的值。
 
squid 仅仅保存每个日志文件的最后logfile_rotate 版本。更老的版本在重命名过程中被删除。假如你想保存更多的拷贝,你需要增加logfile_rotate 限制,或者编写脚本用于将日志文件移动到其他位置。
 
启动Squid后,在另一台Windows电脑上(以Internet Explorer 5.0为例)运行IE,单击“工具”,接着单击“Internet选项”,再单击“连接”选项卡,选择“局域网设置”。
0 0
原创粉丝点击