1、squid 配置过程安装:%tar xzf squid-2.0.RELEASE-src.tar.gz %cd /usr/local/squid/src/ squid-*.*.RELEASE / %./configure %make %make install 简单配置:http_port:设定 Squid 监听的端口,你最好设一个比较好记的端口号,以便在进行客户机配置时容易记住。我的机器上端口号设的是 8080。缺省为 3128。 cache_mem:设定 Squid 占用的物理内存,根据我的经验,cache_mem 的大小不应超过你的服务器物理内存的三分之一,否则将会影响机器的总体性能。 m
2、aximum_object_size:设定 Squid 可以接收的最大对象的大小。Squid 缺省值为 4M,我自己入认为太大,你可以根据自己的需要进行设定。 cache_dir:设定缓存的位置、大小。一般看起来形式如下“cache_dir /usr/local/squid/cache 100 16 256”。 /usr/local/squid/cache 代表缓存的位置;100 代表缓存最大为 100M;16 和 256 代表一级和二级目录数。 (cache_dir /usr/local/squid/cache 100 16 256)cache_effective_user:设定使用缓存的有
3、效用户。缺省为用户 nobody,如果你的系统中没有用户 nobody,最好建一个或以非 root 用户运行 Squid。在/etc/squid/squid.conf 文件中修改# TAG: visible_hostname# If you want to present a special hostname in error messages, etc,# define this. Otherwise, the return value of gethostname()# will be used. If you have multiple caches in a cluster and#
4、get errors about IP-forwarding you must set them to have individual# names with this setting.#Default:# heber#在这里加一句,后面改成你的主机 IP 地址。visible_hostname 10.0.0.3 运行:首先以 root 身份登陆。运行如下命令: /usr/local/squid/bin/squid -z 该命令会产生 Squid 所有的缓存目录。 如果你想前台执行 Squid,接着执行命令: /usr/local/squid/bin/squid -NCd1 该命令正式启动 S
5、quid。如果一切正常,你会看到一行输出 Ready to serve requests. 如果想后台运行 Squid,把它做为一个精灵进程,执行命令: /usr/local/squid/bin/squid 观察 Squid 是否运行使用命令: % squid -k check 输出会告诉你 Squid 的当前状态。 错误信息:# /usr/local/sbin/squid -z 如果得到“Permission denied”的出错信息,如: 09:09:29| Creating Swap Directories FATAL: Failed to make swap directory /us
6、r/local/squid/cache/00: (13) Permission deniedSquid Cache (Version 2.1):Terminated abnormally. CPU Usage: 0.022 seconds Maximum Resident Size: 1000 KB Page faults with physical i/o: 0 则可能是以下原因之一: 磁盘上没有空间了。(对此我无能为力) 没有建立 /usr/local/squid/logs/目录。(手工建一个嘛) 您的/usr/local/squid/logs/cache.log 文件属于 root。(可
7、以用这条命令“chown nobody.nogroup/usr/local/squid/logs/cache.log”改一下,另外/log 和/cache 目录里的所有文件都要有此属性。) 于是我查了一下这些目录中的文件,的确都属于 root,所以我用了这两条命令: # chown nobody.nogroup /usr/local/squid/logs# chown nobody.nogroup /usr/local/squid/cache 然后再试一下建立 Cache 目录: # /usr/local/sbin/squid -z 2001/01/01 09:14:32| Creating
8、Swap Directories 这次运行顺利!dns_nameservers 202.99.160.68 202.99.168.8visible_hostname nero.3322.org北京网通 DNS:202.99.8.1 202.99.16.1北京 202.96.0.133 202.96.199.133 202.97.16.195 squid 配置在 Linux 下的详细配置介绍Squid 工作原理Squid 启动之后,会在 RAM 建立一个 Hash Table,记录硬盘中 object 配置的情形。Squid 又会在 RAM 中建立一个 Digest Table(摘要表)
9、,其功能是和其他有合作关的 Squid (Sibling)互相交换 Digest Table,万一用户端想要的资料自己没有时,可以很快的知道哪一部 Squid Server 有资料 (Squid 也可以透过 ICP 向其他 Squid 查询,但速度较慢)。但是 Digest Table 本身不小,既记忆体又频宽,如果 Server 的内存不够,对外带宽不够,反而比 ICP 查询更慢。 Squid 安装的种类【可能不太合适叫做种类,不过没有更好的词。语文太差_】child、sibling、parent关系如下:Squid Server 之间的第一种关系是:Child 和 Parent。当 Chi
10、ld Squid Server 没有资料时,会直接向 Parent Squid Server 要资料,然後一直等,直到 Parent 给它资料为止。 Squid Server 之间的第二种关系是: Sibling 和 Sibling。当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要或上 internet 去拿。 一般 Squid Server 运作的模式是: 1. 当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Si
11、bling 没资料,就跳过它直接向 Parent 要。 2. 向 Parent 要资料,然後一直等,直到 Parent 给它资料为止(Parent 自己有的资料或上 internet 去拿)。 3. 没有 Parent 时,就自己上 internet 去拿。 4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。 编译安装 Squid./configure -prefix=/usr/local/squid-ip -enable-async-io=160 -enable-icmp -enable-kill-parent-hack -enable-cache-digests -enable-de
12、fault-err-language=Simplify_Chinese -enable-poll & make & make install-enable-async-io=160:这项主要是设置 async 模式来运行 squid,我的理解是设置用线程来运行 squid,如果服务器很强劲,有 1G 以上内存,cpu 使用 SMP 的方式的话可以考虑设成160 或者更高。如果服务器比较糟糕就根据实际情况设了(不要太贪心哦_) 。-enable-icmp:加入 icmp。默认不加。-enbale-kill-parent-hack:当 kill 掉 nobody 的 squid 进程的时候会同时杀
13、死它的父进程。-enable-cache-digests:【。 。 。 】-enable-default-err-language=Simplify_Chinese:当有错误的时候在页面中显示简体中文。【不过 squid 还是会无情的把所有语言都装上,看的不顺的话手工删咯】-enable-poll:可以提升效能。Squid 的结构介绍:安装好的目录在/usr/local/squid-10 (这里假设我的主 ip 最后一段是 10)Squid 的结构是:bin/:放置 squid 默认写好的启动脚本。有 RunAccel; RunCache;squidclient;前 2 个启动 Squid 可
14、以使用,因为当 squid 进程死了后,这个脚本可以自动检测到。 RunAccel 是用于 web 加速用的脚本,而 RunCache 是用于做 squid 代理用的,squidclient 是用本机做squid 测试的。etc/:squid.conf 在这个目录中libexec/:函数库; man/:帮助文件。不用说了吧。 。 。 sbin/ :squid 命令所在目录。一般如果我用来测试就启动 squid 命令。或者用这个命令创建 swap,或者加 -k 参数重启之类的操作。 share/ :一些错误显示的 html 都在里面; var/ :log,pid,swap 都在这个目录中!先看
15、squid 的一个重要的,对我来说也是唯一需要配置的一个配置文件。选项非常多,当然,默认的 squid.conf 文件中对于每一个选项都有比较详细的说明,但是我还是想把我理解的以及必须要进行配置的选项罗列出来,以免过段时间自己都忘了_以下的配置我是要向 sina,sohu,163 学习的 web server 的架构,试着自己去搭建一个这样的环境来看看效果到底如何。因此这里的 squid 不是用来做代理的,而是反向作为网站高速缓存。其实原理差不多,只是方向反一反而已,相信都能理解这点的。使用的测试服务器为 Dell 2650 双 CPU 至强 2.4G 内存 DDR 2G。OS 为 Freeb
16、sd 5.2.1(这里需要说明的是,从实际使用情况来看,squid 跑在 freebsd 上的效果是最快最好的。这是由 os 的文件系统所决定的,千万不能用,solaris,感觉 solaris 的文件系统实在太慢,虽然非常稳定,而且跑多线程的效果是最好的。linux 嘛没有进行测试,不过感觉在 freebsd之下,solaris 之上。 )Squid.conf 的几个重要参数的配置说明 http_port 61.155.143.54:80 #Squid Server 侦听的端口。假设我的主页的 dns server 指到61.155.143.54 上的,因此我必须让 squid 来侦听这个
17、IP 的这个端口。cache_mem 32 MB #要额外提供多少内存给 squid 使用,这里的额外是指 squid 会将最常用的一些缓存放到这块内存中。这个指令也是我看了官方文档后才理解的。因为一开始从实际使用情况来看,我这边设 32M 的话,用 top 命令来查看一般会达到 100M 左右。这点让我让我很想不通,呵呵。然后就去看官方文档,发觉 squid 是这样来计算使用多少内存的:squid 本身的进程大概 10M-20M,然后下面我设的 cache 目录的大小是 500M 的话,那他放在内存里的 hash 索引大概需要 20M 左右,然后再加上这里设置的 cache_mem 的值。官
18、方文档建议你的实际内存大小应该是这个 squid 所需要总内存的 2 倍以上。自己量力而为吧。cache_mem 当然是越大越好了。cache_dir ufs /usr/local/squid-54/var/cache 500 16 256 #设置 squid 存放 cache 目录的位置以及大小。第一个数字 500 是指目录的总大小为 500M(默认为 100M) ,第二个数字 16 是指第一级目录为 16 个,第三个数字 256 是指第二级目录为 256 个我个人觉得如果网站访问量大,并且内容很多的话,可以考虑将默认的 100M 改大一点,否则会报错。我就经历过,错误我忘了记录了(该死!)
19、大致就是说超过 Max 的极限了,当时查了半天才找到罪魁祸首是这条指令,惭愧。cache_access_log nonecache_log nonecache_store_log none #我是将这些 log 记录都关了, 有需要的可以将它们打开。acl managerIP src 10.10.10.10acl ipcanbrows dst 10.10.10.0/24 #acl 应该是 squid 配置里面最难理解也最需要花时间的地方了。应该说只需要修改很小的一部分就可以了,像这里我只是在原来的基础上加了 2 条记录,前面一条的意思是我定义了 10.10.10.10 为源路径,另外一条是指目
20、的端是10.10.10.0/24 这个网段。而 managerIP,ipcanbrows 随便取得名字。具体的规则需要下面的语句来定义。10.10.10.10 就是本服务器的内网 ip,而 apache server 的 ip 就在 10.10.10.0/24 这个网段里,不需要用外网 ip,一定程度上节约了 ip 地址。http_access allow manager managerIP ipcanbrows localhost #加上 2 个允许就可以了。高深的配置我觉得我也不需要,用户可以访问就达到目的了:)httpd_accel_host virtual #由于我后面的 apache
21、 server 是基于 ip 来做虚拟主机的,因此这里需要设置成 virtual。httpd_accel_port 80 #http 加速的端口,因为习惯等原因,还是将后面的 apache server 监听80 端口。httpd_accel_uses_host_header on #如果选了 virtual 的话,这里必须设置成 on。这里最多只列出了 5%左右的选项,但是我配置的时候就只是用到了这些,因此,如果做网站加速的话,基本设置就是这些。当然需要更强劲的功能的话就需要好好读读 squid 的配置文件的文档了。squid 配置的最后步骤1. 改变 var 目录的权限:chown -R
22、nobody var2. 创建缓存目录:sbin/squid -z 3. 启动 squid: bin/RunAccel & (这边我使用 squid 附带的启动脚本来启动 squid,有个好处就是,如果 squid 的进程死了的话,这个脚本会自动启动 squid,对于运行在线上的服务器来说,这点太重要了。squid 配置的一些使用体会1. squid 使用时间长了,速度会变慢,我的建议是每 2 小时 kill 掉 squid 进程,RunAccel 脚本会自动再启动的它。2. 写一脚本,放进 crontab 中,每天凌晨 4 点左右把 cache 目录清空。#!/bin/sh# squid c
23、lean swap and restart script by marco lu SQUID_DIR=/usr/local/squid-54/PID_FILE=$SQUID_DIRvar/logs/squid.pidCACHE_DIR=$SQUID_DIRvar/cachePPID=ps aux | grep -i squid-54 | grep -v grep|awk print $2kill -9 $PPID /dev/nullkill -9 cat $PID_FILE /dev/nullrm -rf $CACHE_DIR/*$SQUID_DIRsbin/squid -z /dev/nullif $? -eq 0 then$SQUID_DIRbin/RunAccel & /dev/nullfi