[i=s] 本帖最后由 gary168 于 2009-3-25 20:01 编辑 [/i]
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。
5.8 停止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 信号相同。
5.9 重配置运行中的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 个文件描述符已被分配出去。
5.10 滚动日志文件
除非你在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 限制,或者编写脚本用于将日志文件移动到其他位置。
请见13.7 章关于滚动日志的其他信息。
6.访问控制
6.1 访问控制元素
ACL 元素是Squid 的访问控制的基础。这里告诉你如何指定包括IP 地址,端口号,主机名,和URL 匹配等变量。每个ACL 元素有个名字,在编写访问控制规则时需要引用它们。基本的ACL 元素语法如下:
acl name type value1 value2 ...
例如:
acl Workstations src 10.0.0.0/16
在多数情况下,你能对一个ACL 元素列举多个值。你也可以有多个ACL 行使用同一个名字。例如,下列两行配置是等价的:
acl http_ports port 80 8000 8080
acl Http_ports port 80
acl Http_ports port 8000
acl Http_ports port 8080
6.1.1 一些基本的ACL 类型
Squid 大约有25 个不同的ACL 类型,其中的一些有通用基本类型。例如,src 和dst ACL使用IP 地址作为它们的基本类型。为避免冗长,我首先描述基本类型,然后在接下来章节里描述每种ACL 类型。
6.1.1.1 IP 地址
使用对象:src,dst,myip
squid 在ACL 里指定IP 地址时,拥有强有力的语法。你能以子网,地址范围,域名等形式编写地址。squid 支持标准IP 地址写法(由”.”连接的4 个小于256 的数字)和无类域间路由规范。另外,假如你忽略掩码,squid 会自动计算相应的掩码。例如,下例中的每组是相等的:
acl Foo src 172.16.44.21/255.255.255.255
acl Foo src 172.16.44.21/32
acl Foo src 172.16.44.21
acl Xyz src 172.16.55.32/255.255.255.248
acl Xyz src 172.16.55.32/28
acl Bar src 17