免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13355 | 回复: 7
打印 上一主题 下一主题

[proxy] [好文共享]《Squid 中文权威指南》第4章 译者:彭勇华 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-03 15:22 |只看该作者 |倒序浏览
译者序:
本人在工作中维护着数台Squid 服务器,多次参阅Duane Wessels(他也是Squid 的创始人)的这本书,原书名是"Squid: The Definitive Guide",由O'Reilly 出版。我在业余时间把它翻译成中文,希望对中文Squid 用户有所帮助。对普通的单位上网用户,Squid 可充当代理服务器;而对Sina,NetEase 这样的大型站点,Squid 又充当WEB 加速器。这两个角色它都扮演得异常优秀。窗外繁星点点,开源的世界亦如这星空般美丽,而Squid 是其中耀眼的一颗星。
对本译版有任何问题,请跟我联系,我的Email是:yonghua_peng@yahoo.com.cn  彭勇华


--------------------------------------------------------------------------------------

第4章 快速配置向导

4.1 squid.conf 语法

Squid 的配置文件相对规范。它与其他许多unix 程序相似。每行以配置指令开始,后面跟着数字值或关键字。在读取配置文件时,squid 忽略空行和注释掉的行(以#开始)。如下是一些配置行示例:
cache_log /squid/var/cache.log
# define the localhost ACL
acl Localhost src 127.0.0.1/32
connect_timeout 2 minutes
log_fqdn on

某些指令取唯一值。在这些情形下,重复赋予该指令不同的值,将覆盖前面的值。例如,
下面是一个连接超时值。第一行无效,因为第二行覆盖了它:
connect_timeout 2 minutes
connect_timeout 1 hour

另外,某些指令取列表值。在这些情形下,每一个新增的值都有效。"扩展方式"指令以这种方法工作:
extension_methods UNGET
extension_methods UNPUT
extension_methods UNPOST

对这些基于列表的指令,你通常能在同一行中赋予多个值:
extension_methods UNGET UNPUT UNPOST

许多指令有通用类型。例如,连接超时值是一个时间规范,在数字后面跟着时间单元。例如:
connect_timeout 3 hours
client_lifetime 4 days
negative_ttl 27 minutes

类似的,大量的指令指向文件大小或者内存额度。例如,你可以这样编写大小规范:十进制数字后面跟bytes,KB,MB 或GB.例如:
minimum_object_size 12 bytes
request_header_max_size 10 KB
maximum_object_size 187 MB

另一种值得提起的类型是触发器,它的值是on 或者off。许多指令使用该类型。例如:
server_persistent_connections on
strip_query_terms off
prefer_direct on

通常,配置文件指令能以任何顺序出现。然而,如果某个指令指向的值被其他指令所定义,那么顺序就很重要。访问控制列表是个好的例子。acl 被用在http_access 规则之前必须被定义:
acl Foo src 1.2.3.4
http_access deny Foo

squid.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。既然指令每次都有所改变,你能参考该文档,以获取最近的更新。

该章剩下的部分是关于在开始运行squid 之前,你必须知道的少数指令。


4.2 User IDs

你可能知道,unix 进程和文件拥有文件和组属主的属性。你必须选择某个用户和组给squid。该用户和组的组合,必须对大部分squid 相关的文件和目录有读和写的权限。

我高度推荐创建名为"squid"的用户和组。这避免了某人利用squid 来读取系统中的其他文件。假如不止一个人拥有对squid 的管理权限,你可以将他们加到squid 组里。

unix 进程继承了它们父进程的属主属性。那就是说,假如你以joe 用户来启动squid,squid 也以joe 来运行。假如你不想以joe 来运行squid,你需要预先改变你的用户ID。这是su 命令的典型功能。例如:
joe% su - squid
squid% /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/etc,$prefix/libexec,$prefix/share。该用户ID 也必须有对日志文件和缓存目录的写访问
权。

squid 也有一个cache_effective_group 指令,但你也许不必设置它。默认的,squid 使用cache_effective_user 的默认组(从/etc/passwd 文件读取)。


4.3 端口号

http_port 指令告诉squid 在哪个端口侦听HTTP 请求。默认端口是3128:
http_port 3128

假如你将squid 作为加速器运行(见15 章),你也许该将它设为80。

你能使用附加的http_port 行,来指示squid 侦听在多个端口上。假如你必须支持客户组(它们被配置得不一致),这点就经常有用。例如,来自某个部门的浏览器发送请求到3128,
然而另一个部门使用80 端口。简单的将两个端口号列举出来:
http_port 3128
http_port 8080

你也能使用http_port 指令来使squid 侦听在指定的接口地址上。当squid 作为防火墙运行时,它有两个网络接口:一个内部的和一个外部的。你可能不想接受来自外部的http 请求。为了使squid 仅仅侦听在内部接口上,简单的将IP 地址放在端口号前面:
http_port 192.168.1.1:3128


4.4 日志文件路径

我将在第13 章讨论所有squid 的日志细节。你现在你关注的唯一事情是,squid 将它的日志放在何处。默认的日志目录是squid 安装位置下的logs 目录。例如,假如你在./configure
时没有使用--prefix=选项,那么默认的日志文件路径是/usr/local/squid/var/logs。

你必须确认日志文件所存放的磁盘位置空间足够。在squid 写日志时如果接受到错误,它会退出和重启。该行为的主要理由应引起你的注意。squid 想确认你不会丢失任何重要的日志信息,特别是你的系统被滥用或者被攻击时。

squid 有三个主要的日志文件:cache.log,access.log,store.log.第一个文件即cache.log,包含状态性的和调试性的消息。当你刚开始运行squid 时,你应密切的关注该文件。假如squid拒绝运行,理由也许会出现在cache.log 文件的结尾处。在正常条件下,该文件不会变得很大。也请注意,假如你以-s 选项来运行squid,重要的cache.log 消息也可被送到你的syslog进程。通过使用cache_log 指令,你可以改变该日志文件的路径:
cache_log /squid/logs/cache.log

access.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 章关于日志轮循的解释。


4.5 访问控制

在第6 章里有更多的关于访问控制的描述。现在,我只讲述少量的访问控制方法,以使热心的读者能快速开始使用squid。

squid 默认的配置文件拒绝每一个客户请求。在任何人能使用代理之前,你必须在squid.conf 文件里加入附加的访问控制规则。最简单的方法就是定义一个针对客户IP 地址的ACL 和一个访问规则,告诉squid 允许来自这些地址的HTTP 请求。squid 有许多不同的ACL类型。src 类型匹配客户IP 地址,squid 会针对客户HTTP 请求检查http_access 规则。这样,你需要增加两行:
acl MyNetwork src 192.168.0.0/16
http_access allow MyNetwork

请将这些行放在正确的位置。http_access 的顺序非常重要,但是acl 行的顺序你不必介意。你也该注意默认的配置文件包含了一些重要的访问控制,你不应该改变或删除它们,除非你完全理解它们的意义。在你第一次编辑squid.conf 文件时,请看如下注释:
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

在该注释之后,以及"http_access deny all"之前插入你自己的新规则。

为了彻底说明,如下是一个合理的初始访问控制配置,包括推荐的默认控制和早先的例子:
acl All src 0/0
acl Manager proto cache_object
acl Localhost src 127.0.0.1/32
acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535
acl SSL_ports 443 563
acl CONNECT method CONNECT
acl MyNetwork src 192.168.0.0/16
http_access allow Manager Localhost
http_access deny Manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow MyNetwork
http_access deny All


4.6 可见主机名

希望你不必担心visible_hostname 指令。然而,假如squid 不能发现它所运行的机器的主机名,你就必须设置它。如果发生这样的事,squid 抱怨和拒绝运行:
% squid -Nd1
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

有大量的理由使squid 需要知道主机名:
+ 主机名出现在squid 的错误消息里,这帮助用户验证潜在问题的源头。
+ 主机名出现在squid 转发的cache 单元的HTTP Via 头里。当请求到达原始主机时,Via头包含了在传输过程中涉及的代理列表。squid 也使用Via 头来检测转发环路。我将在第10章里讨论转发环路。

squid 对特定事务使用内部URL,例如FTP 目录列表的图标。当squid 对FTP 目录产生HTML 页面时,它插入小图标用以指明该目录中的文件类型。图标URL 包含了cache 的主机名,以便web 浏览器能直接从squid 请求它们。

每个从squid 响应的HTTP 回复包含了X-Cache 头。这并非官方HTTP 头。它是一个扩展头,用以指明该响应是cache 点击还是cache 丢失。既然请求和响应可能经过多个cache,每个X-Cache 头包含了cache 报告点击或丢失的名字。如下是一个通过2 个cache 的响应示例:
HTTP/1.0 200 OK
Date: Mon, 29 Sep 2003 22:57:23 GMT
Content-type: text/html
Content-length: 733
X-Cache: HIT from bo2.us.ircache.net
X-Cache: MISS from bo1.us.ircache.net

squid 在启动时试图自动获取主机名。首先它调用gethostname()函数,这通常能返回正确的主机名。接着,squid 调用gethostbyname()函数尝试对主机名进行DNS 查询。该函数典型的返回IP 地址和系统的规范名。假如gethostbyname()成功,squid 在错误消息里,Via 头里等地方使用这个规范名。

因为大量的理由,squid 可能不能检测到它的规范主机名,包括:
+ 主机名可能未设置。
+ 主机名可能从DNS 区域或/etc/hosts 文件里丢失。

squid 系统的DNS 客户端配置可能不正确或丢失。在unix 系统上,你该检查/etc/resolv.conf 和/etc/host.conf 文件。

假如你看到上述的致命错误,你必须修正主机名和DNS 信息,或者显式的给squid 指明主机名。在大多数情况下,请确认"hostname"命令返回一个完全规范的主机名,并且在/etc/hosts 文件里增加这个接口。假如这样不成功,请在squid.conf 里设置可见主机名:
visible_hostname squid.packet-pushers.net


4.7 管理联系信息

你应该设置cache_mgr 指令作为对用户的帮助。它是一个email 地址,假如问题发生,用户能写信给它。cache_mgr 地址默认出现在squid 的错误消息里。例如:
cache_mgr squid@web-cache.net


4.8 下一步

在创建了初步的配置文件后,你多少准备首次运行squid 了。请遵循下面章节的建议。

当你掌握了启动和停止squid 后,你该花费一些时间来改善配置文件。你可能想增加更高级的访问控制,这在第6 章里有描述。既然我在这里没有讨论磁盘cache,你该花些时间阅读第7 和第8 章。

论坛徽章:
0
2 [报告]
发表于 2005-12-09 12:55 |只看该作者

Can you help me? what ist this problem?Thank you !

启动squid失败 :

2005/12/09 12:53:41| unrecognised basic auth scheme parameter 'casesensitive'
2005/12/09 12:53:41| squid.conf line 1892: http_access allow
2005/12/09 12:53:41| aclParseAccessLine: Access line contains no ACL's, skipping
2005/12/09 12:53:41| parseConfigFile: line 2145 unrecognized: 'xiaoyong'
FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

Squid Cache (Version 2.5.STABLE3): Terminated abnormally.
CPU Usage: 0.020 seconds = 0.010 user + 0.010 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 414

论坛徽章:
0
3 [报告]
发表于 2006-03-28 08:16 |只看该作者
好文章,多多學習了!

论坛徽章:
0
4 [报告]
发表于 2007-01-31 17:39 |只看该作者
我把他整理成电子书俩

论坛徽章:
0
5 [报告]
发表于 2007-05-18 15:10 |只看该作者
确实是好东西

论坛徽章:
0
6 [报告]
发表于 2007-08-18 16:05 |只看该作者

set visible_hostname myhost

FATAL: Could not determine fully qualified hostname.  Please set 'visible_hostname'

[root@mislcs ~]# vi /etc/squid/squid.conf

/visible_hostname

visible_hostname myhost



[root@mislcs ~]#/etc/init.d/squid start
启动 squid:   

OK THANKS !!!!

[ 本帖最后由 lcs100 于 2007-8-18 16:07 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-03-05 11:10 |只看该作者

squid问题!弄我好几天了,所以上来请教兄弟门

朋友们,我在配置SQUID的时候遇到一些问题,请指点一二。我的配置文件如下:
#vi /etc/squid/squid.conf
http_port 172.16.126.4:3128
cache_mem 256 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_effective_user squid
cache_effective_group squid
dns_nameservers 172.16.2.1
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
visible_hostname 172.16.126.4
cache_mgr wluck@sohu.com
acl all src 0.0.0.0/0.0.0.0
http_access allow all

#NCSA Authentication
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic realm input ncsa auth infor
acl auth_user proxy_auth REQUIRED
http_access allow auth_user proxy_auth

#vi /etc/squid/passwd
pcboy:/qCJl22VPARX2


#service squid reload
2009/03/05 10:15:27| WARNING: '0.0.0.0/0.0.0.0' is a subnetwork of '0.0.0.0/0.0.0.0'
2009/03/05 10:15:27| WARNING: because of this '0.0.0.0/0.0.0.0' is ignored to keep splay tree searching predictable
2009/03/05 10:15:27| WARNING: You should probably remove '0.0.0.0/0.0.0.0' from the ACL named 'all'
2009/03/05 10:15:27| aclParseAccessLine: ACL name 'proxy_auth' not found.
FATAL: Bungled squid.conf line 20: http_access allow auth_user proxy_auth
Squid Cache (Version 3.0.STABLE2): Terminated abnormally.
CPU Usage: 0.007 seconds = 0.005 user + 0.002 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0

在windows机器里尝试使用**服务器,但连接不了,找不到服务器。 请问如何解决?

论坛徽章:
0
8 [报告]
发表于 2009-12-06 05:44 |只看该作者
已经安装上了,但有许多问题不明白,想进一步学习,我想,这篇宏著应当就是我最需要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP