免费注册 查看新帖 |

Chinaunix

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

squid代理缓存服务器的安装与配置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-23 10:36 |只看该作者 |倒序浏览
    好久没写字,手有点生疏。由于最近要老大分配要搞WAF(web aplication firewall),所以自己也关注了下代理缓存服务器,代理缓存服务器有透明,半透明,不透明,反向和正向之分。
    在了解以上知识之后,自己找了本书《Squid中文权威指南》好好拜读了一下果然授意非浅。好了不多说了,开始吧!


第一步:安装squid
1、首先可以从squid站点
www.squid-cache.org
获取该软件的。
2、解压$ tar xvfz squid-2.5.stable.tar.gz具体解压到什么路径根据自己的习惯。
3、调整内核:(我使用的是linux)
      首先编辑/usr/include/bits/typesizes.h 文件,改变__FD_SETSIZE 的值:#define _ _FD_SETSIZE 32768
      使用命令增加内核文件描述符的限制:# echo 32768 > /proc/sys/fs/file-max
      运行#sh
      最后,增加进程文件描述符的限制,在你即将编译squid 的同一个shell 里执行:sh# ulimit -Hn 32768
     该命令必须以root 运行,仅仅运行在bash shell。不必重启机器。
4、编译./configure设置:./configure --prefix=/usr/local/squid
                          --enable-removal-policies="heap,lru"
                         --enable-storeio="aufs,coss,diskd,null,ufs"
                         --enable-delay-pools
                         --enable-linux-netfilter
                         --enable-useragent-log
                         --enable-referer-log
                        --enable-truncate
                        --enable-underscores
                        --enable-basic-auth-helpers="NCSA"
                        --enable-err-language="Simplify_Chinese"
                        --enable-default-err-language="Simplify_Chinese"
                        --enable-stacktrace
                        --enable-auth="basic"
                        --disable-dependency-tracking
                       --disable-internal-dns
                      --with-pthreads
5、编译,安装
     $make
     $make install


第二步:设置配置文件squid.conf和系统hosts文件
1、首先创建一个新用户,并提升权限
    $useradd usrname password
    $chown squid:squid /usr/local/squid/var/logs
2、配置hosts表
    首先我们要明白一下squid在CDN中扮演的角色。squid在CDN中其实只是个代理+缓存。跟一般的代理服务器类似,squid代替用户向真正有内容的服务器进行请求,并且缓存下来。所不同的是,squid是作为一个类似apache相同的web服务器存在,用户访问的时候并不感觉到是访问了一台代理服务器,而是个真实的web服务器。一般情况下,我们把这种方式称之为“反向代理”。
    所以,我们需要让squid知道内容要到哪里去取。因为我们已把域名naizhao.com配置了智能DNS,而且这台squid服务器也是网通的,按照正常的dns解析,会把naizhao.com解析为2.2.2.2这个IP(也就是网通机器本身)。但这个IP上面并不存在任何所需要的内容,任何需要的内容其实是在1.1.1.1上(源服务器)。所以我们需要为naizhao.com固定一个IP,也就是1.1.1.1。
让系统得到这个IP的方法有两种,一种是配置hosts表,另外一种是系统里面搭建一个dns服务器。Windows下大家应该会经常去编辑到hosts文档,linux下同样也存在这个文档,我们在前面的vim教程中已提到过。搭建dns系统这个方法工程太过庞大,还是编辑hosts文档相对来说比较简单,所以我们就采用编辑hosts表的方法。
    linux下面的hosts表位于/etc/hosts,格式跟Windows大致相同,打开后我们把下面一行加到末尾
1.1.1.1 naizhao.com www.naizhao.com cnc.naizhao.com

3、配置squid.conf
    squid的配置文档位于/usr/local/squid/etc/squid.conf,打开后会有英文的周详说明。暂时我们无需去理解这个文档里面各个配置的含义,相信大家看到一大堆英文都会头大的。大家只需要知道如何把squid按照自己的需求跑起来,并且不出错就好。
    我们先用rm -rf squid.conf删掉。不用怕删掉后找不回来,更有一个默认的squid.conf.default在呢。一般的linux程式,包括apache等,都会有一个.default的默认文档,方便大家恢复默认配置,或作为一个修改的参考,squid.conf删掉后,我们再用vi squid.conf,新建这个文档,然后把下面的内容帖进去,保存
http_port 80 vhost vport=80
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mem 1024 MB
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 256 KB
cache_dir ufs /var/spool/squid 20480 16 256
cache_swap_low 80
cache_swap_high 97
strip_query_terms off
request_body_max_size 5 MB
memory_pools on
memory_pools_limit 50 MB
access_log none
cache_log /var/log/squid/cache.log
cache_store_log none
pid_filename /var/run/squid.pid
hosts_file /etc/hosts
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i naizhao\.com          240     100%    1440    ignore-reload
refresh_pattern -i www\.naizhao\.com           240     100%    1440    ignore-reload
refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern .                           120 50%    1440
acl all src 0.0.0.0/0.0.0.0
acl p-manager proto cache_object
acl s-localhost src 127.0.0.1/255.255.255.255
acl d-localhost dst 127.0.0.0/8
acl d-domains dstdomain .naizhao.com
acl p-ssl port 443 563
acl p-safe port 80 443 563
acl m-conn method CONNECT
acl m-purge method PURGE
acl n-maxconn maxconn 15
http_access allow p-manager s-localhost
http_access allow m-purge
http_access deny !p-safe
http_access deny m-conn !p-ssl
http_access deny n-maxconn
http_access allow p-manager
http_access allow d-domains
http_access deny all
http_reply_access allow all
acl r-url urlpath_regex realtime
cache deny r-url
icp_access allow all
#follow_x_forwarded_for allow all
#acl_uses_indirect_client offrange_offset_limit -1
#dns_timeout 2 seconds
forward_timeout 10 seconds
connect_timeout 10 seconds
peer_connect_timeout 6 seconds
read_timeout 10 seconds
request_timeout 6 seconds
persistent_request_timeout 16 seconds
cache_mgr silence.z@gmail.com
cache_effective_user nobody
cache_effective_group nobody
visible_hostname cnc.naizhao.com
logfile_rotate 0
always_direct allow all
error_directory /usr/local/squid/share/errors/Simplify_Chinese
coredump_dir /var/spool/squid
需要说明的几个参数:
cache_mem 1024 MB (squid使用的内存大小,注意必须要留下500M左右的内存给系统使用,建议系统内存2G,然后分配1G给squid)
cache_dir ufs /var/spool/squid 20480 16 256 (缓存的目录,放在/var/spool/squid下面,大小是20G,第一级目录是16个,第二级目录是256个。因为一个目录下面放置的文档和目录数量有限制,所以这里必须要配置多个目录,以适合squid存放大量文档的需要。目录数千万别配置太大,否则会引起系统死机)
memory_pools_limit 50 MB (内存池,用来存放缓存文档的链表,方便高速查找文档存放的对应位置,无需太大。不懂就别管了)
cache_log /var/log/squid/cache.log(log文档的存放位置,必须要有读写权限,稍后说到)
refresh_pattern -i naizhao\.com          240     100%    1440    ignore-reload
refresh_pattern -i www\.naizhao\.com           240     100%    1440    ignore-reload
refresh_pattern -i .gif 180 20% 10080 override-expire ignore-reload reload-into-ims
refresh_pattern -i .jpg 180 20% 10080 override-expire ignore-reload reload-into-ims
(上面的几行指定了文档缓存的时间,能够指定某个域名,也能够指定某个文档类型。有更加多的域名或文档类型就按照需要添加吧。-i是忽略大小写,naizhao.com和.gif是文档类型,240是最小缓存的时间,1440是最大缓存时间,都是分钟。这些先不用管,有需要的时候调整就好了。我们的口号是:先跑起来)
acl d-domains dstdomain .naizhao.com(允许访问的域名列表。假如要跑多个网站就添加多几个,用空格分开。naizhao.com前面有个英文的.,表示任何*.naizhao.com都允许。假如没有这个点,那么就只允许naizhao.com,访问www.naizhao.com就会提示访问被拒绝。)
cache_mgr silence.z@gmail.com (管理员的邮件地址,改为自己的)
cache_effective_user nobody
cache_effective_group nobody
(用来跑squid的用户和用户组。为了避免使用root帐号造成的不安全因素,大部分linux程式都会先用root运行,然后马上把运行的用户从root转换到其他用户,这样就算程式有漏洞被黑了,黑客也只能得到这个普通用户的权限,对系统的危害将大大降低。保持默认即可)
visible_hostname cnc.naizhao.com (服务器输出的机器名字,多台squid分布的时候这个很重要,通过配置多个不同的名字,很容易就能够找出哪台服务器有问题)
coredump_dir /var/spool/squid (squid挂掉后,临终遗言要放到哪里。不用管,一般人看不懂)
修改好配置文档后,我们还需要做一些最后的工作。
先建一个log目录,用来存放log文档。按照squid.conf的配置,我们输入下面的命令
mkdir /var/log/squid
chown nobody:nobody /var/log/squid
chown命令是配置任何者和组。刚才说了,squid将会使用用户nobody组nobody来运行。nobody:nobody冒号前面的是用户,后面的是用户组。
更有squid的缓存目录,同样需要配置权限为nobody:nobody
chown nobody:nobody /var/spool/squid
查看命令是否成功,能够使用ls -lh
ls -lh /var/spool/
……
drwxr-xr-x 3 nobody nobody 4.0K Jun 15 08:19 squid
剩下最后一步,初始化squid的缓存目录结构。(也就是刚才说的16个一级目录,256个二级目录。本身这些文档夹不存在,需要通过squid的命令建立)
squid的命令在/usr/local/squid/sbin下,我们进入这个目录,然后看看squid命令的帮助我们能够看到-z命令就是建立缓存目录的,所以我们输入
./squid -z
2007/07/07 07:52:03| Creating Swap Directories
没有任何错误提示,说明目录已建立成功了,我们能够用 ls /var/spool/squid看看效果。
4、让squid跑起来
./squid -Nd 10
2007/07/07 07:53:50| Starting Squid Cache version 2.6.STABLE13 for i686-pc-linux-gnu...
2007/07/07 07:53:50| Process ID 3135
2007/07/07 07:53:50| With 1024 file descriptors available
2007/07/07 07:53:50| Using poll for the IO loop
2007/07/07 07:53:50| Performing DNS Tests...
2007/07/07 07:53:50| Successful DNS name lookup tests...
2007/07/07 07:53:50| DNS Socket created at 0.0.0.0, port 1026, FD 4
2007/07/07 07:53:50| Adding nameserver 211.147.6.3 from /etc/resolv.conf
2007/07/07 07:53:50| Adding nameserver 61.233.9.9 from /etc/resolv.conf
2007/07/07 07:53:50| Unlinkd pipe opened on FD 8
2007/07/07 07:53:50| Swap maxSize 20971520 KB, estimated 1613193 objects
2007/07/07 07:53:50| Target number of buckets: 80659
2007/07/07 07:53:50| Using 131072 Store buckets
2007/07/07 07:53:50| Max Mem size: 1048576 KB
2007/07/07 07:53:50| Max Swap size: 20971520 KB
2007/07/07 07:53:50| Store logging disabled
2007/07/07 07:53:50| Rebuilding storage in /var/spool/squid (DIRTY)
2007/07/07 07:53:50| Using Least Load store dir selection
2007/07/07 07:53:50| Set Current Directory to /var/spool/squid
2007/07/07 07:53:50| Loaded Icons.
2007/07/07 07:53:52| Accepting accelerated HTTP connections at 0.0.0.0, port 80, FD 7.
2007/07/07 07:53:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 9.
2007/07/07 07:53:52| WCCP Disabled.
2007/07/07 07:53:52| Ready to serve requests.
2007/07/07 07:53:52| Done scanning /var/spool/squid (0 entries)
2007/07/07 07:53:52| Finished rebuilding storage from disk.
2007/07/07 07:53:52|         0 Entries scanned
2007/07/07 07:53:52|         0 Invalid entries.
2007/07/07 07:53:52|         0 With invalid flags.
2007/07/07 07:53:52|         0 Objects loaded.
2007/07/07 07:53:52|         0 Objects expired.
2007/07/07 07:53:52|         0 Objects cancelled.
2007/07/07 07:53:52|         0 Duplicate URLs purged.
2007/07/07 07:53:52|         0 Swapfile clashes avoided.
2007/07/07 07:53:52|   Took 2.0 seconds (   0.0 objects/sec).
2007/07/07 07:53:52| Beginning Validation Procedure
2007/07/07 07:53:52|   Completed Validation Procedure
2007/07/07 07:53:52|   Validated 0 Entries
2007/07/07 07:53:52|   store_swap_size = 0k
2007/07/07 07:53:53| storeLateRelease: released 0 objects
已经正常跑起来了,到此其实已经完成了!
第三步:Squid安装调试中的几个常用命令
1,初始化你在 squid.conf 里配置的 cache 目录
#squid/sbin/squid -z    //第一次启动squid服务时必须输入此命令
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,在前台启动squid,并输出启动过程。
#squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4,启动squid在后台运行。
#squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
5,停止 squid
#squid/sbin/squid -k shutdown
这个不用解释吧。
6,重引导修改过的 squid.conf
#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 squid:squid /home/cache
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。
2,修改squid 日志目录的权限
#chown -R squid:squid /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 等参数及代表的信息,请参看
www.chinaunix.org
彭勇华《squid中文权威指南》13.2.1 章节。
当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名  
www.xxxx.com
,同样可以看到access.log里关于该域名的行。
4,squid -k rotate        轮换squid的日志文件/var/log/squid,Squid代理服务器日志文件
的增长速度是惊人的,很容易点球满磁盘空间导致系统不能正常工作,甚至是死机.为了解决日志文件增长太快的问题,squid采用了"轮换"的方法.在squid.conf中可以通过logfile_rotate来设置文件轮换的个数,如:
logfile_rotate 10     ,轮换的工作一般用crontab定时器完在周期性的日志轮换,例如每周六凌晨2:00进行日志轮换,则执行如下命令: crontab -e
0 2 * * 6 squid -k rotate
    小贴士:Squid默认的错误提示信息为英文,对于英文不好的用户来说,实在不方便.在/etc/squid/squid.conf里添加如下:
error_directory /usr/share/squid/errors/Simplify_Chinese 即可显示中文的错误提示



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/101492/showart_2076343.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP