编译Squid的前期准备
我们需要先了解一个叫做“文件描述符”的东西。我们知道,人能同时干的事情是有限的。文件描述符就是一个限制最大上限的东西。文件描述符用来限制一个程序 能同时打开的文件数目,默认是1024。也就是说,如果不修改文件描述符,那么一个程序只能同时打开1024个文件。1024这个数字,一般程序已经够用 了,但Squid不行。Squid会同时打开成千上万个文件,以保证最高的效率和响应速度。
想象一下下面两种情况:a.用户每次访问squid,squid会按照需要打开文件,然后读取文件内容再返回给用户。b.squid预先打开访问频率高的文件,用户访问squid,squid直接把内容返回给用户。相对来说,后面的方法可以对用户的请求进行更加快的反应。
1,要更改文件描述符的大小,必须要修改两个文件。
#vi /usr/include/bits/typesizes.h
#vi /usr/include/linux/posix_types.h
如果提示找不到这两个文件就运行(请注意VI命令的用法,如果文件存在就直接打开编辑,如果文件不存在,就是创建文件,所以,如果你运行上面的命令后如果是创建新的文件就请立即退出,不要保存.按Esc,再按q键,再按Shift+1就会出现!号了,然后回车):
#yum install gcc安装gcc环境
————–
用vi打开上面的文件(如果忘记如何使用,请参考前面章节),查找
#define __FD_SETSIZE 1024
把1024改为65536,然后保存
—————–
#ulimit -Hs 65536
#ulimit -n 65536
2,开始获取并安装squid
#cd /home/
#wget http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE9.tar.gz
#tar zxvf squid-2.7.STABLE9.tar.gz
#cd squid-2.7.STABLE9
#./configure –prefix=/usr/local/squid –enable-follow-x-forwarded-for –enable-storeio=aufs,ufs –with-maxfd=65536 –with-pthreads –enable-dlmalloc –enable-poll –enable-stacktraces –enable-removal-policies=heap,lru –enable-delay-pools
—————————
如果运行后是:
config.status: creating tools/Makefile
config.status: creating include/autoconf.h
config.status: executing depfiles commands
表示成功,可进行下一步make了
————————
如果提示如下内容表示没有安装gcc:
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for a thread-safe mkdir -p… /bin/mkdir -p
checking for gawk… gawk
checking whether make sets $(MAKE)… yes
checking whether to enable maintainer-specific portions of Makefiles… no
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: no acceptable C compiler found in $PATH
See `config.log’ for more details.
——————
运行:
#yum install gcc
不过先要用yum install yum-fastestmirror更新下载源,不然太慢了
#make clean
清理前面的编译缓存
——————
#make
—————————
如果运行make后是如下内容就可以进行下一步运行make install:
make[2]: Leaving directory `/root/squid-2.7.STABLE9/tools’
make[1]: Leaving directory `/root/squid-2.7.STABLE9/tools’
make[1]: Entering directory `/root/squid-2.7.STABLE9′
make[1]: Nothing to be done for `all-am’.
make[1]: Leaving directory `/root/squid-2.7.STABLE9′
————–
#make install
—————————
如果运行make install后是如下内容就可以进行下一步配置操作了:
make[2]: Leaving directory `/root/squid-2.7.STABLE9′
make[1]: Leaving directory `/root/squid-2.7.STABLE9′
到这里,squid就算是编译安装完毕了。我们可以到/usr/local/squid目录看看,里面已经躺着一大堆文件了。
————–
#cd /usr/local/squid
#ls -lh
#cd /usr/local/squid/etc/
#cp squid.conf squid.conf.back
#rm squid.conf
#vi squid.conf
———-将下面的内容复制到squid.conf文件中,然后保存—————-
http_port 80 transparent
acl local dst 178.63.252.16 127.0.0.0/8
acl request method HEAD CONNECT PUT DELETE
acl all src 0.0.0.0/0.0.0.0
acl OverConnLimit maxconn 50
visible_hostname localhost
cache_dir ufs /var/spool/squid 256 8 16
coredump_dir /var/spool/squid
access_log none
cache_log /var/log/squid/cache_log
cache_store_log none
pid_filename /var/run/squid.pid
http_access deny local
http_access deny request
http_access deny OverConnLimit
http_access allow all
error_directory /usr/local/squid/share/errors/Simplify_Chinese
cache_mgr [email protected]
half_closed_clients off
cache_effective_user nobody
cache_effective_group nobody
positive_dns_ttl 5 minute
negative_dns_ttl 1 minute
shutdown_lifetime 5 second
connect_timeout 30 second
read_timeout 60 second
request_timeout 60 second
cache_mem 256 MB
—————将上面的内容复制到squid.conf文件中,然后保存———————————————-
#mkdir /var/log/squid
#chown nobody:nobody /var/log/squid
#mkdir /var/spool/squid
#chown nobody:nobody /var/spool/squid
#ls -lh /var/spool/
#cd /usr/local/squid/sbin
#./squid -z
#./squid -Nd 10
打开浏览器,输入http://74.82.177.13,会看到Access Denied的错误提示,说明squid已经正常跑起来了。
因为指定了-d参数,所以现在squid会把所有的调试信息都输出终端。 按下键盘的ctrl+c,然后输入killall squid杀死squid,可以终止squid的进程。
8,设置要加速的主机域名
#vi /etc/hosts
在最后一行加入
74.126.180.108 olionic.com
74.126.180.108 www.olionic.com //回车,记住:在最后一个域名后回车,一定要在最后一个域名回车
注意事项:IP与域名之间不是空格,在录入IP后,按键盘上的Tab键,再录入域名,一个域名占一行,在最后一个域名后回车,一定要在最后一个域名回车
9,重新引导Squid运行
#/usr/local/squid/sbin/squid -k shutdown
#/usr/local/squid/sbin/squid -s
常用squid调试命令:
————————–
重引导修改过的 squid.conf
/usr/local/squid/sbin/squid -k reconfigure
————————-
1,初始化你在 squid.conf 里配置的 cache 目录
#/usr/local/squid/sbin/squid -z
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#/usr/local/squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,在前台启动squid,并输出启动过程。
#/usr/local/squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4,启动squid在后台运行。
#/usr/local/squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
5,停止 squid
#/usr/local/squid/sbin/squid -k shutdown
这个不用解释吧。
6,重引导修改过的 squid.conf
#/usr/local/squid/sbin/squid -k reconfigure
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。
再来点其他的。
1,修改cache 缓存目录的权限。
#chown -R nobody:nobody /home/cache
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。
2,修改squid 日志目录的权限
#chown -R nobody:nobody /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。
例如生成 access.log cache.log store.log
3,查看你的日志文档。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。
当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名 [url]www.exachina.com[/url] ,同样可以看到access.log里关于该域名的行。