检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。
大多数情况下,1024 个文件描述符足够了。
非常忙的 cache 可能需要 4096 或更多。
在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的 2 倍。
通常在你的 Unix shell 中能找到系统的文件描述符限制。
所有的 C shell 及其类似的 shell 有内建的 limit 命令。
更新的 Bourne shell 及其类似的 shell 有一条叫做 ulimit 的命令。
为了发现你的系统的文件描述符限制,试运行如下命令:在我们的 Linux 下运行: ulimit -n1024很显然 1024 可能无法满足需求重新设置 ulimit -HSn 65536 ulimit -n65536需要将 ulimit -HSn 65536 设置在/etc/rc.d/rc.local 中,防止重启后失效 花费时间来增加这个限制值的大小。
否则,squid 在高负载时执行性能将很低。
当然你还可以在每一次系统启动后执行上述 echo 和 ulimit 命令,或者至少在squid 启动之前。
假如你使用某个 rc.d 脚本来启动 squid,那是一个放置这些命令的好地方。
七,临时端口范围临时端口是 TCP/IP 栈分配给出去连接的本地端口。
换句话说,当 squid 发起一条连接到另一台服务器,内核给本地 socket 分配一个端口号。
这些本地端口号有特定的范围限制。
例如,在 FreeBSD 上,默认的临时端口范围是 1024-5000。
临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。
这是因为一些 TCP 连接在它们被关闭时进入 TIME_WAIT 状态。
当连接进入 TIME_WATI 状态时,临时端口号不能被重用。
你能使用 netstat 命令来显示有多少个连接进入这个状态: netstat -n grep TIME_WAITProto Recv-Q Send-Q Local Address ForeignAddress statetcp4 0 0192.43.244.42.19583 212.67.202.80.80 TIME_WAITtcp4 0 0192.43.244.42.19597 202.158.66.190.80 TIME_WAITtcp4 0 0192.43.244.42.19600 207.99.19.230.80 TIME_WAITtcp4 0 0192.43.244.42.19601 216.131.72.121.80 TIME_WAITtcp4 0 0192.43.244.42.19602 209.61.183.115.80 TIME_WAITtcp4 0 0192.43.244.42.3128 128.109.131.47.25666 TIME_WAITtcp4 0 0192.43.244.42.3128 128.109.131.47.25795 TIME_WAITtcp4 0 0192.43.244.42.3128 128.182.72.190.1488 TIME_WAITtcp4 0 0192.43.244.42.3128 128.182.72.190.2194 TIME_WAIT注意这个例子中既有客户端连接又有服务器端的连接。
客户端连接有 3128 作为临时端口号,服务器端连接有 80 作为远程主机的端口号。
临时端口号出现在本地地址栏里。
在该例子里,它们是 19000 秒。
在 Linux 上,简单的写一对数字到下列指定文件: echo quot1024 40000quot gt /proc/sys/net/ipv4/ip_local_port_range不要忘记将这些命令加到你的系统启动脚本中,以使机器每一次重启后都生效。
八,安装tar -zxvf squid-3.0.STABLE13.tar.gzcd squid-3.0.STABLE13./configure --prefix/usr/local/squid3 --enable-dlmalloc--enable-gnuregex --enable-async-io--enable-removal-policiesheaplru --enable-delay-pools--disable-snmp --enable-storeioufsaufsnull --disable-wccp--enable-kill-parent-hack --disable-select --enable-authbasic--with-aio --disable-ident-lookup --with-filedescriptors65536--enable-err-languagesquotSimplify_Chinesequot--enable-default-err-languagesquotSimplify_Chinesequotmakemake install九,配置基本知识摘自 squid 中文指南基本知识:Squid 的配置文件相对规范。
它与其他许多 unix 程序相似。
每行以配置指令开始,后面跟着数字值或关键字。
在读取配置文件时,squid 忽略空行和注释掉的行(以开始)。
如下是一些配置行示例:cache_log /squid/var/cache.log define the localhost ACLacl Localhost src 127.0.0.1/32connect_timeout 2 minuteslog_fqdn on某些指令取唯一值。
在这些情形下,重复赋予该指令不同的值,将覆盖前面的值。
例如,下面是一个连接超时值。
第一行无效,因为第二行覆盖了它:connect_timeout 2 minutesconnect_timeout 1 hour另外,某些指令取列表值。
在这些情形下,每一个新增的值都有效。
quot扩展方式quot指令以这种方法工作:extension_methods UNGETextension_methods UNPUTextension_methods UNPOST对这些基于列表的指令,你通常能在同一行中赋予多个值:extension_methods UNGET UNPUT UNPOST许多指令有通用类型。
例如,连接超时值是一个时间规范,在数字后面跟着时间单元。
例如:connect_timeout 3 hoursclient_lifetime 4 daysnegative_ttl 27 minutes类似的,大量的指令指向文件大小或者内存额度。
例如,你可以这样编写大小规范:十进制数字后面跟 bytesKBMB 或 GB.例如:minimum_object_size 12 bytesrequest_header_max_size 10 KBmaximum_object_size 187 MB另一种值得提起的类型是触发器,它的值是 on 或者 off。
许多指令使用该类型。
例如:server_persistent_connections onstrip_query_terms offprefer_direct on通常,配置文件指令能以任何顺序出现。
然而,如果某个指令指向的值被其他指令所定义,那么顺序就很重要。
访问控制列表是个好的例子。
acl 被用在http_
access 规则之前必须被定义:acl Foo src 1.2.3.4http_
access deny Foosquid.conf 文件里的许多东西是大小写敏感的,例如指令名。
你不能将http_port 写成 HTTP_port。
默认的 squid.conf 文件包含了对每个指令的大量注释,以及指令的默认值。
例如: TAG: persistent_request_timeout How long to wait for the next HTTP request on a persistent connection after the previous request completes.Default: persistent_request_timeout 1 minute每次安装 squid 后,当前默认配置文件存放在prefix/etc 目录下的squid.conf.default。
既然指令每次都有所改变,你能参考该文档,以获取最近的更新。
User ID你可能知道,unix 进程和文件拥有文件和组属主的属性。
你必须选择某个用户和组给 squid。
该用户和组的组合,必须对大部分 squid 相关的文件和目录有读和写的权限。
我高度推荐创建名为quotsquidquot的用户和组。
这避免了某人利用 squid 来读取系统中的其他文件。
假如不止一个人拥有对 squid 的管理权限,你可以将他们加到squid 组里。
unix 进程继承了它们父进程的属主属性。
那就是说,假如你以 joe 用户来启动squid,squid 也以 joe 来运行。
假如你不想以 joe 来运行 squid,你需要预先改变你的用户 ID。
这是 su 命令的典型功能。
例如:joe su - squidsquid /usr/local/squid/sbin/squid不幸的是,运行 squid 并非总是如此简单。
在某些情况下,你必须以 root 来启动 squid,这依赖于你的配置。
例如,仅仅 root 能绑定 TCP 套接字 到 特权端口上,如 80。
假如你必须以 root 来启动 squid,你必须设置cache_effective_user 指令。
它告诉 squid,在执行完需要 特别权限的任务后,变成哪个用户。
例如:cache_effective_user squid你提供的该名字必须是有效用户(在/etc/passwd 文件里)。
请注意仅仅当你以root 来启动 squid 时,你才需要用到该指令。
仅仅 root 有能力来随意改变用户身份。
假如你以 joe 来启动 squid,它不能改变到 squid 用户。
你 可能尝试不设置 cache_effective_user, 直接以 root 来运行 squid。
假如你试过,你会发现 squid 拒绝运行。
这违背了安全规 则。
假如外部攻击者有能力危及或利用 squid,他能获取对系统的全部访问权。
尽管我们努力使 squid 安全和少 bug,但还是稳重点好。
假 如你没有设置 cache_effective_user以 root 来启动 squid,squid 使用nobody 作为默认值。
不管你选择什么用户 ID, 请确认它有对下面目录的读访问权:prefix/etcprefix/libexecprefix/share.该用户 ID 也必须有对日志文件 和缓存目录的写访问权。
squid 也有一个 cache_effective_group 指令,但你也许不必设置它。
默认的,squid 使用 cache_effective_user 的默认组(从/etc/passwd 文件读取)。
端口号http_port 指令告诉 squid 在哪个端口侦听 HTTP 请求。
默认端口是 3128:http_port 3128假如你将 squid 作为加速器运行(见 15 章),你也许该将它设为 80。
你能使用附加的 http_port 行,来指示 squid 侦听在多个端口上。
假如你必须支持客户组(它们被配置得不一致),这点就经常有用。
例如,来自某个部门的浏览器发送请求到 3128,然而另一个部门使用 80 端口。
简单的将两个端口号列举出来:http_port 3128http_port 8080 当你也能使用 http_port 指令来使 squid 侦听在指定的接口地址上。
squid 作为防火墙运行时,它有两个网络接口:一个内部的和一个外部的。
你可能不想接受来自外部的 http 请求。
为了使 squid 仅仅侦听在内部接口上,简单的将 IP 地址放在端口号前面:http_port 192.168.1.1:3128日志文件路径你现在你关注的唯一事情是,squid 将它的日志放在何处。
默认的日志目录是squid 安装位置下的 logs 目录。
例如,假如你在./configure 时没有使用--prefix选项,那么默认的日志文件路径是/usr/local/squid/var /logs. 在你必须确认日志文件所存放的磁盘位置空间足够。
squid 写日志时如果接受到错误,它会退出和重启。
该行为的主要理由应引起你的注意。
squid 想确认你不会丢失任何重要的日志信息,特别是你的系统被滥用或者被攻击时。
squid 有三个主要的日志文件:cache.logaccess.logstore.log.第一个文件即 cache.log,包含状态性的和调试性的消息。
当你刚开始运行 squid 时,你应密切的关注该文件。
假如 squid 拒绝运行,理由也许会出现在 cache.log 文件的结尾处。
在正常条件下,该文件不 会变得很大。
也请注意,假如你以-s 选项来运行 squid,重要的 cache.log 消息也可被送到你的 syslog 进程。
通过使用cache_log 指 令,你可以改变该日志文件的路径:cache_log /squid/logs/cache.logaccess.log 文件包含了对 squid 发起的每个客户请求的单一行。
每行平均约 150个字节。
也就是说,在接受一百万条客户请求后,它的体积约是 150M。
请使用cache_
access_log 指令来改变该日志文件的路径:cache_
access_log /squid/logs/
access.log假 如因为某些理由,你不想 squid 记录客户端请求日志,你能指定日志文件的路径为/dev/null. store.log 文件对大多数 cache 管理员来说并非很有用。
它包含了进入和离开缓存的每个目标的记录。
平均记录大小典型的是 175-200 字。
然 而,节 squid 不在 store.log 里对 cache 点击创建接口,所以它比
access.log包含少得多的记录。
请使用 cache_store_log 指令来改变它的位置:cache_store_log /squid/logs/store.log通过指定路径为 none,你能轻易的完全禁止 store.log 日志:cache_store_log none假 如你不小心,squid 的日志文件增加没有限制。
某些操作系统对单个文件强制执行 2G 的大小限制,即使你有充足的磁盘空间。
超过该限制会导致写错误,这样 squid 就会退出。
为了保证日志文件大小合理,你应创建任务来有规律的重命名和打包日志。
squid 有内建功能来使这个容易做到。
请见 13.7 章关于日 志轮循的解释。
访问控制现在,我只讲述少量的访问控制方法,以使热心的读者能快速开始使用 squid。
squid 默认的配置文件拒绝每一个客户请求。
在任何人能使用代理之前, 你必须在 squid.conf 文件里加入附加的访问控制规则。
最简单的方法就是定义一个针对 客户 IP 地址的 ACL 和一个访问规则,告诉 squid 允许来自这些地址的 HTTP请求。
squid 有许多不同的 ACL 类型。
src 类型匹配客户 IP 地 址,squid 会针对客户 HTTP 请求检查 http_
access 规则。
这样,你需要增加两行:acl MyNetwork src 192.168.0.0/16http_
access allow MyNetwork请将这些行放在正确的位置。
http_
access 的顺序非常重要,但是 acl 行的顺序你不必介意。
你也该注意默认的配置文件包含了一些重要的访问控制,你不应该改变或删除它们,除非你完全理解它们的意义。
在你第一次编辑 squid.conf 文件时,请看如下注释: INSERT YOUR OWN RULES HERE TO ALLOW
ACCESS FROM YOUR CLIENTS在该注释之后,以及quothttp_
access deny allquot之前插入你自己的新规则。
为了彻底说明,如下是一个合理的初始访问控制配置,包括推荐的默认控制和早先的例子:acl All src 0/0acl Manager proto cache_objectacl Localhost src 127.0.0.1/32acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535acl SSL_ports 443 563acl CONNECT method CONNECTacl MyNetwork src 192.168.0.0/16http_
access allow Manager Localhosthttp_acc.
上一篇:
【精品】MAXPLUS2简介微电子课件
下一篇:
经济民主一种关于劳动的政治经济学