目录:
一.测试安装环境
二.编译安装
三.Squid工作模式及原理
n 3.1 SQUID如何工作
u 3.1.1 [传统代理]
u 3.1.2[透明代理]
u 3.1.3[反向代理]
n 3.2 SQUID工作原理
u 3.2.1 SQUID缓存的存放方式:
u 3.2.2SQUID的查询方式
u 3.2.3SQUID服务器之间的关系:
u 3.2.4SQUID运作模式
四.Squid 配置
n 4.1 主配置文档配置
n 4.2验证squid.conf的语法和配置
n 4.3初始化cache目录
n 4.4前台启动squid,查看是否报错
n 4.5透明代理设置
n 4.6反向代理设置
五.Squid语法
六.Squid优化
n 6.1 日志优化
n 6.2目录优化
n 6.3 Cache优化
n 6.4最大文件描述符数量限制优化
n 6.5 脚本优化优化
u 6.5.1 log脚本:
u 6.5.2squid脚本:
u 6.5.3Cache 脚本:
七.脚本用法
n 7.1 log脚本:
n 7.2 squid脚本:
n 7.3 Cache 脚本:
八.补充
n 8.1 打补丁
n 8.2 重运行configure
n 8.3 nginx 与squid
九.Cachemgr.cgi监控squid运行状态
n 9.1 Cachemgr.cgi配置过程
n 9.2 生成口令文件
n 9.3 验证
十.错误总结
n 10.1 权限问题
n 10.2 不能识别它自己的完整可验证域名
n 10.3 版本更新问题
n 10.4 Squid无法反向代理多个后台WEB服务器
n 10.5 在运行一段时间后,Squid变慢了
声明:
本文档参考网上很多squid配置文档结合自己的实际配置写出来的,主要针对的是squid配置方面。对于其认证和限制方面没有太多的介绍,请大家则而观之,一面浪费自己宝贵的时间。有机会的话,我会把认证和限制方面的做部分介绍。
===============================================================================
感慨:
古人云:温故而知新。此言绝非说说而已,在离开学堂才短短3个月而已,一个简单的squid竟然困扰了我两天才把基本的测试页显示出来。想当初这只是几分钟的事啊!!真是惭愧!!哎。现在趁热打铁,赶紧将自己以前忘记的都记下来,这里有什么太过简单的东西,请大家海涵!
===============================================================================
++++++++++++++++++++++++++++++++++++++++++++++++
一.测试安装环境:
Squid Server IP:
eth0 192.168.77.222
eth1 192.168.7.222
Http Server IP:
eth0 192.168.77.225
Client Ip:
eth0 192.168.7.223
CentOS 内核版本:
[root@rs_200_143 ~]# uname -r
2.6.18-128.el5xen
Squid源代码包版本号:
http://www.squid-cache.org/Versions/v3/3.1/ squid-3.1.4.tar.gz
squid-3.1.4
安装目录:
/usr/local/squid
squid log目录:
/usr/local/squid/var/logs
+++++++++++++++++++++++++++++++++++++++++++
二.编译安装:
[root@song squid-3.1.4]#./configure --prefix=/usr/local/squid \
--enable-gnuregex \
--disable-carp \
--enable-async-io=240 \
--with-pthreads \
--enable-storeio=ufs,aufs,diskd \
--disable-wccp \
–enable-icmp \
--enable-kill-parent-hack \
--enable-cachemgr-hostname=localhost \
--enable-default-err-language=Simplify_Chinese \
--with-maxfd=65535 \
--enable-poll \
--enable-linux-netfilter \
--enable-large-cache-files \
--disable-ident-lookups \
--enable-default-hostsfile=/etc/hosts \
--with-dl \
--with-large-files \
--enable-delay-pools \
--enable-snmp \
--disable-internal-dns \
–enable-underscore\
–enable-arp-acl
[root@song Squid]# make && make install
释:
–prefix=/usr/local/squid :指定软件的安装路径
–enable-gnuregex :支持GNU正则表达式。
–disable-carp: Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluste
–enable-async-io=240等同于同时打开./configure如下三个选项
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs
--disable-wccp用于阻止或分发HTTP请求到一个或多个caches
–enable-icmp :加入icmp支持
–enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉
--enable-cachemgr-hostname=localhost:指定cachemgr-hostname值为localhost
-- enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。
–disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。
--enable-delay-pools 开启squid延时池功能
–enable-cahce-digests :加快请求时,检索缓存内容的速度。
–enable-err-language=”Simplify_Chinese” 和
–enable-default-err-languages=”Simplify_Chinese” :指定出错是显示的错误页面为简体中文
--with-maxfd=65535指定最大文件描述
–enable-poll :指定使用Poll()函数,提升性能就是啦。
--disable-ident-lookups允许服务器利用客户端的特殊TCP连接来发现用户名
–enable-linux-netfilter :可以支持透明代理
--enable-large-cache-files开启大文件支持,支持2GB以上的文件
--disable-internal-dns使用自己的内部DNS查询
–enable-underscore :允许解析的URL中出现下划线,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址
–enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
[root@song Squid]# make && make install
释:
–prefix=/usr/local/squid :指定软件的安装路径
–enable-gnuregex :由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理,激活使用GNU正则表达式。
–disable-carp: Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluste
–enable-async-io=80 :等同于同时打开./configure如下三个选项
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs
–enable-icmp :加入icmp支持
–enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉
–enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。
–disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。
–enable-cahce-digests :加快请求时,检索缓存内容的速度。
–enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
–enable-err-language=”Simplify_Chinese” 和
–enable-default-err-languages=”Simplify_Chinese” :指定出错是显示的错误页面为简体中文
–enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某 些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。
–enable-linux-netfilter :可以支持透明代理
–enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址
+++++++++++++++++++++++++++++++++++++++++++
三.Squid工作模式及原理
环境:
Squid:192.168.77.222
Client:192.168.7.223
Server: 192.168.77.223
+++++++++++++++++++++++++++++++
SQUID如何工作
[传统代理]
1.SQUID被绑定到代理服务器的3128端口。
2. 客户端浏览器被配置使用代理服务器的3128端口。
3.客户端不需要配置DNS。
4.代理服务器上需要配置代理服务器。
5.客户端不需要 配置缺省路由。
当我们在客户端浏览器中打开一个web请求,比如“http://www.baidu.com”,这时将陆续发生以下事件:
1. 客户端使用某一端口(比如1025)连接代理服务器3128端口,请求web页面“http://www.baidu.com”
2.代理服务器向 DNS请求“www.baidu.com”,得到相应的IP地址192.168.77.223。然后,代理服务器使用某一端口(比如1037)向该IP地址的80端口发 起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户端浏览器显示该页面。
从 www.baidu.com的角度看来,连接是在192.168.77.222地1037端口和192.168.77.223的80端口之间建立的。
从client的角度看 来,连接是在192.168.7.223的1025端口和192.168.77.222的3128端口之间建立的。
[透明代理]
透明代理的意思是客户端根本不需要知道有代理服务器 的存在。
在以上基础上我们做以下工作:
1.配置透明代理服务器软件运行在代理服务器的3128端口。
2.配置代理服务器将所有对 80端口的连接重定向到3128端口。
3.配置客户端浏览器直接连解到Internet。
4.在客户端配置好DNS.
5.配置客 户端的缺省网关为192.168.1.1.
当我们在客户端浏览器中打开一个web请求,比如 “http://www.baidu.com”,这时将陆续发生以下事件:
1.客户端向DNS请求“www.baidu.com”,得到相应的 IP地址192.168.77.223。然后,客户端使用某一端口(比如1066)向该IP地址的80端口发起web连接请求,请求web页面。
2.当该请求包 通过透明代理服务器时,被防火墙将该数据包重定向到代理服务器的绑定端口3128。于是,透明
代理服务器用某一端口(比如1088)向 192.168.77.223的80端口发起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户 端浏览器显示该页面。
从www.baidu.com的角度看来,连接是在192.168.77.222地1088端口和192.168.77.223的80端口之间建立的。从 client的角度看来,连接是在192.168.7.223的1066端口和192.168.77.223的80端口之间建立的。
以上就是传统代理服务器和透 明代理服务器的区别所在。
[反向代理]
反向代理是相对于传统代理而言,是代理web服务器接受客户端的请求
在此,我们忽略客户端的设置,假设客户端是可以直接访问互联网
web服务器与客户端的结构如下:
假设已经将www.baidu.com的域名指向了squid服务器所在的ip,并且在web服务器集群里做了dns轮询。
web server1 -|
web server2 -|- squid 服务器/ INTERNET / - Client
web server3 -|
1.客户端通过IE向DNS服务器发送访问www.baidu.com的请求,由客户所在地的DNS服务器解析www.baidu.com的IP为192.168.77.223并返回给用户。
2.客户收到DNS返回的服务器IP地址,重新向 www.baidu.com指向的IP地址发送访问请求。
3.squid服务器接收到用户的请求后,查询自身缓存中是否有用户请求内容,有则直接发送给客户端,如果没有则通过内部DNS轮询查询空闲服务器,并将客户请求发送到该服务器,在获取到用户数据并返回给用户的同时保留一份
在自己本身的缓存当中。在用户看来,自己访问的是www.baidu.com这个服务器,实际上真正的WEB服务器为SQUID缓存后面的服务器或者服务器集群,通过外部DNS做CNAME转向,将用户请求转发到内部真正的web服务器 上去
SQUID工作原理
一、SQUID缓存的存放方式:
每一台Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下才放文件(Squid 把它叫object)。
二、 SQUID的查询方式:
SQUID通过查询表的方式来定位某个资源的位置,所查询的表叫Hash table 和Digest table;Digest table在这里可以称之为摘要或者索引,它记录了磁盘上每个分区,每个目录里存的缓存摘要,Hash table在这里可以称之为目录或者提纲,它记录所有的Digest table表信息,SQUID接受到请求后先查询Hash table,在根据Hash table所指向的Digest table查询需要的信息。
三、SQUID服务器之间的关系:
SQUID 服务器存在两种工作关系,一种为Child、Parent,当child squid server没有用户需要的数据时,就象parent server发出请求,并持续等待,直到parent server回应自己为止;另外一种为ibling,当本地SQUID server没有用户请求数据时,会向sibling server发出请求,如果sibling server没有资料则会向上级sibling或者INTERNET发送数据请求
四、SQUID运作模式
1. 当Squid Server没有资料时,会先向Sibling 的Squid Server 要资料,如果Sibling没资料,就跳过它直接向Parent 要。
2. 向Parent 要资料,然後一直等,直到Parent 给它资料为止(Parent 自己有的资料或上Internet 去拿)。
3. 没有Parent 时,就自己上Internet 去拿。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。
一般而言,把网路上 一层的Squid Server 设成Sibling 是不错的选择(例如:一个学校将所在城市网和附近的大学设成Sibling),因为网路上一层的Squid Server 服务对象较多,其硬件功能较强,离我们比较近,速度也比较快;万一要不到资料,我们还可以自己上Internet 去拿。那什麽时候设Parent?当您的出口只有一个,或上一层Squid Server 拿不到资料,自己也一定拿不到,只好将上一层Squid Server 设为Parent。
+++++++++++++++++++++++++++++++++++++++++++
四.Squid 配置:
赋/ usr/local/squid/var/logs/ 777 权限:
[root@song squid]# chmod 777 /usr/local/squid/var/logs/
主配置文档配置:
/var/local/squid/etc/squid.conf
#acl limit
acl woyoSYS src 192.168.77.0/24
http_access allow woyoSYS
#cache limit
cache_dir ufs /usr/local/squid/var/cache 100 16 256
cache_mem 100 MB
cache_swap_low 90
cache_swap_high 95
cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
coredump_dir /usr/local/squid/var/cache
cache_mgr [email protected]
visible_hostname song.domain.com #必须指明自己的主机名,否则squid无法正常启动
http_port 192.168.7.222:3128 transparent #squid监听192.168.7.222的3128端口
验证squid.conf的语法和配置:
[root@song ~]# /usr/local/squid/sbin/squid -k parse
2010/07/06 05:38:15| Processing Configuration File: /usr/local/squid/etc/squid.conf (depth 0)
2010/07/06 05:38:15| Starting Authentication on port 192.168.7.222:3128
2010/07/06 05:38:15| Disabling Authentication on port 192.168.7.222:3128 (interception enabled)
2010/07/06 05:38:15| Disabling IPv6 on port 192.168.7.222:3128 (interception enabled)
初始化cache目录:
在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录。命令很简单
[root@song sbin]# ./squid -z
2010/07/05 18:06:36| Creating Swap Directories
前台启动squid,查看是否报错:
[root@song ~]# /usr/local/squid/sbin/squid -N -d1
2010/07/06 05:42:43| Starting Squid Cache version 3.1.4 for i686-pc-linux-gnu...
2010/07/06 05:42:43| Process ID 10240
2010/07/06 05:42:43| With 1024 file descriptors available
2010/07/06 05:42:43| Initializing IP Cache...
2010/07/06 05:42:43| helperOpenServers: Starting 5/5 'dnsserver' processes
2010/07/06 05:42:43| Unlinkd pipe opened on FD 19
2010/07/06 05:42:44| Swap maxSize 102400 + 102400 KB, estimated 15753 objects
2010/07/06 05:42:44| Target number of buckets: 787
2010/07/06 05:42:44| Using 8192 Store buckets
2010/07/06 05:42:44| Max Mem size: 102400 KB
2010/07/06 05:42:44| Max Swap size: 102400 KB
2010/07/06 05:42:44| Version 1 of swap file with LFS support detected...
2010/07/06 05:42:44| Rebuilding storage in /usr/local/squid/var/cache (DIRTY)
2010/07/06 05:42:44| Using Least Load store dir selection
2010/07/06 05:42:44| Set Current Directory to /usr/local/squid/var/cache
2010/07/06 05:42:44| Loaded Icons.
2010/07/06 05:42:44| Accepting intercepted HTTP connections at 192.168.7.222:3128, FD 23.
2010/07/06 05:42:44| HTCP Disabled.
2010/07/06 05:42:44| Squid modules loaded: 0
2010/07/06 05:42:44| Ready to serve requests.
2010/07/06 05:42:44| Done reading /usr/local/squid/var/cache swaplog (1 entries)
2010/07/06 05:42:44| Finished rebuilding storage from disk.
2010/07/06 05:42:44| 1 Entries scanned
2010/07/06 05:42:44| 0 Invalid entries.
2010/07/06 05:42:44| 0 With invalid flags.
2010/07/06 05:42:44| 1 Objects loaded.
2010/07/06 05:42:44| 0 Objects expired.
2010/07/06 05:42:44| 0 Objects cancelled.
2010/07/06 05:42:44| 0 Duplicate URLs purged.
2010/07/06 05:42:44| 0 Swapfile clashes avoided.
2010/07/06 05:42:44| Took 0.10 seconds ( 9.63 objects/sec).
2010/07/06 05:42:44| Beginning Validation Procedure
2010/07/06 05:42:44| Completed Validation Procedure
2010/07/06 05:42:44| Validated 27 Entries
2010/07/06 05:42:44| store_swap_size = 4
2010/07/06 05:42:44| storeLateRelease: released 0 objects
有个下面这句就可以试着启动squid了
2010/07/06 05:42:44| Ready to serve requests.
透明代理设置:
1.透明代理中一定要把client的网关指向squid,否则无法使正常代理
2.Squid.conf编辑:http_port 192.168.7.222:3128 transparent #支持透明代理
3. # iptables -t nat -A PREROUTING -s 192.168.7.223/32 -p tcp --dport 80 -j REDIRECT --to-port 3128
4. # service iptables save
反向代理设置:
1.Squid.conf编辑:http_port 192.168.7.222:80 vhost vport #支持域名和IP的虚拟主机
2. 实例:
cache_peer 192.168.77.222 parent 81 0 no-query originserver weight=1 name=a
cache_peer 192.168.77.222 parent 82 0 no-query originserver weight=1 name=b
#cache_peer 192.168.77.253 parent 80 0 no-query originserver weight=1 name=c
cache_peer_domain a www.serverA1.com
cache_peer_domain b www.serverA2.com
#cache_peer_domain c www.serverB.com
#以上六行配置,让 Squid 服务器知道:
#从客户端过来的请求,如果是 www.serverA1.com,则 Squid 向 ServerA 192.168.77.222 的端口 81发送请求;
#从客户端过来的请求,如果是 www.serverA2.com,则 Squid 向 ServerA 192.168.77.222 的端口 82发送请求;
#从客户端过来的请 求,如果是 www.serverB.com,则 Squid 向 ServerA 192.168.77.51 的端口 80发送请求;
+++++++++++++++++++++++++++++++++++++++++++
五.Squid语法:
启动squid 服务
# /usr/local/squid/sbin/squid -s
停止squid 服务
# /usr/local/squid/sbin/squid -k shutdown
Squid用法帮助信息
# /usr/local/squid/sbin/squid -h
在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录。命令很简单:
#/usr/local/squid/sbin/squid -z
重配置运行中的squid最好的方法是使用squid -k reconfigure命令:
#/usr/local/squid/sbin/squid -k reconfigure
周期性的滚动日志文件,以阻止它们变得太大
#/usr/local/squid/sbin/squid -k rotate
在前台启动squid,并输出启动过程。
#squid/sbin/squid -N -d1
可以根据这个测试命令用来验证squid.conf的语法和配置
#/usr/local/squid/sbin/squid -k parse
+++++++++++++++++++++++++++++++++++++++++++
六.Squid优化:
1.日志周期性滚动:
0 4 * * * /usr/local/squid/sbin/squid -k rotate &
2.Log 目录周期性检查:
0 4 * * 6 /usr/local/squid/movelog.sh &
3.Cache周期性优化:
0 4 * * * /usr/local/squid/clear_squid_cache.sh gif &
0 4 * * * /usr/local/squid/clear_squid_cache.sh swf &
0 4 * * * /usr/local/squid/clear_squid_cache.sh gif &
4.最大文件描述符数量限制优化:
通常情况下,Squid 默认为1024个文件描述,一般情况已经够用。当系同高度繁忙时,肯能会用到4096个或更大。在编译 Squid 前推荐将描述符更改至,系统限制级别的 2~3倍
-H 设置硬件资源限制.
-S 设置软件资源限制
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
查看默认文件描述符数量:
# ulimit -n
1024
临时修改文件描述符数量
# ulimit –SHn 65536
永久修改文件描述符数量
# vim /usr/include/bits/typesizes.h
#define __FD_SETSIZE 65536
#vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400
# vim /etc/sysctl.conf
fs.file-max=102400
# ulimit -n
6553
5.脚本优化:
log脚本:
# cat /usr/local/squid/movelog.sh
#!/bin/bash
SLOG=`du -sh /usr/local/squid/var/logs/ | awk '{print $1}' | awk -F '.' '{print $1}'`
if [ $SLOG -gt 100 ];then
if [ ! -d /var/log/squid ];then
mkdir /var/log/squid
else
mv /usr/local/squid/var/logs/ /var/log/squid
echo "move squid log to /var/logs" | mail -s [email protected]
fi
else
echo "The size of /usr/local/squid/var/logs/ is `du -sh /usr/local/squid/var/logs/ | awk '{print $1}' | awk -F 'M' '{print $1}'`"
fi
squid脚本:
# cat /usr/local/squid/squid.sh
#!/bin/bash
# this script is for Squid
case "$1" in
start)
/usr/local/squid/sbin/squid –s
sleep 1
if netstat -tnulp | grep squid ;then echo "squid is start" ;else echo "please check it";fi
;;
stop)
/usr/local/squid/sbin/squid -k shutdown
sleep 1
if ! netstat -tnulp | grep squid ;then echo "squid is stop" ;else echo "please check it";fi
;;
status)
if netstat -tnulp | grep squid ;then echo "squid is running" ;else echo "squid is stop";fi
;;
reload)
/usr/local/squid/sbin/squid -k reconfigure
sleep 1
if netstat -tnulp | grep squid ;then echo "squid is reload" ;else echo "please check it";fi
;;
restart)
if netstat -tnulp | grep squid ;then echo "Squid proess is running" ;else
/usr/local/squid/sbin/squid -k shutdown && /usr/local/squid/sbin/squid -s
sleep 1
if netstat -tnulp | grep squid ;then echo "squid is restart" ;else echo "please check it";fi
fi
;;
esac
Cache 脚本:
# cat clear_squid_cache.sh
#!/bin/bash
squidcache_path="/usr/local/squid/var/cache"
squidclient_path="/usr/local/squid/bin/squidclient"
grep -a -r $1 $squidcache_path/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}' | grep [a-zA-Z0-9]$ > cache_list.txt
for url in `cat cache_list.txt`; do
$squidclient_path -m PURGE -p 3128 $url
Done
+++++++++++++++++++++++++++++++++++++++++++++++
七.脚本用法:
Cache脚本用法:
清楚所有Flash缓存(扩展名.swf)
# /usr/local/squid/clear_squid_cache.sh swf
Squid.sh脚本用法:
/usr/local/squid/sbin/squid.sh | Squid.sh start | stop | status | restart | reload
+++++++++++++++++++++++++++++++++++++++++++
八. 补充
1. 打补丁
在你运行squid一段时间后,你可能发现需要打源代码补丁,用以修正bug或者增加试验性的功能
为了打补丁-或者有时候叫差别文件-你需要一个叫做"patch"的程序。你的操作系统必须有该程序。如果没有,你可以从GNU工具集里下载(http://www.gnu.org/directory/patch.html).
为了打补丁,你必须把补丁文件存放在系统中某处。然后进入到squid的源代码目录,运行如下命令:
#patch < /tmp/patch_file
2. 重运行configure
有时候你可能发现有必要重新运行./configure。例如,假如你调整了内核参数,你必须再次运行./configure以使它能发现新设置
在运行./configure之后,你必须再次编译和安装squid。安全起见,建议先运行make clean:
#make clean
以相同的选项重运行./configure,使用如下命令:
#config.status –recheck
3. 假如想让squid既作cache代理,又作加速器,那么列出这2个端口:
http_port 80
http_port 3128
这里啰嗦下,当squid监听自己的80端口作反向代理是时,client默认访问的就是自己的80端口,所以在client的IE中访问时就不用输入特定的代理端口号。这里我其实也不知道要表达一个什么意思,但是我以前在长时间没有接触squid时,在这里晕了。呵呵,如果大侠们没有在这里晕过话,不用考虑,直接过!希望新手们能稍稍注意下。呵呵
4.nginx 与squid
Nginx高并发处理能力远远大于Squid,因此,在分布大量的静态文件的时候,改变原来单独使用Squid的结构,将Nginx放在Squid之前, 实际的使用效果表明,比独立使用Squid要好很多,并发能力得以很大提高。
+++++++++++++++++++++++++++++++++++++++++++
九. Cachemgr.cgi监控squid运行状态
9.1Cachemgr.cgi配置过程
#cp /usr/local/squid/libexec/cachemgr.cgi /var/www/cgi-bin/
修改配置文件/etc/http/conf/http.conf
<Location /cgi-bin/cachemgr.cgi>
AuthType Basic
AuthName "Squidadmin"
AuthUserFile /usr/local/squid/etc/passwd/.htaccess
require valid-user
</Location>
9.2生成口令文件
htpasswd -c /usr/local/squid/etc/passwd/.htaccess squidadmin “创建密码文件 ”
New passwd:
Re-type new passwd:
Adding password for user squidadmin
9.3验证
在浏览器的地址列中键入 http://192.168.7.222(服务器的名称或IP地址)/cgi-bin/cachemgr.cgi。
+++++++++++++++++++++++++++++++++++++++++++
十.错误总结:
1.权限问题:(squid的默认用户是nobody)
[root@song sbin]# ./squid -k parse
2010/07/05 17:49:19| Processing Configuration File: /usr/local/squid/etc/squid.conf (depth 0)
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
messages will be sent to 'stderr'.
查看日志:
[root@song sbin]# tail /var/log/messages
Jul 5 17:52:58 song squid[30354]: Process ID 30354
Jul 5 17:52:58 song squid[30354]: With 1024 file descriptors available
Jul 5 17:52:58 song squid[30354]: Initializing IP Cache...
Jul 5 17:52:58 song squid[30354]: helperOpenServers: Starting 5/5 'dnsserver' processes
Jul 5 17:52:58 song squid[30354]: storeDirWriteCleanLogs: Starting...
Jul 5 17:52:58 song squid[30354]: Finished. Wrote 0 entries.
Jul 5 17:52:58 song squid[30354]: Took 0.00 seconds ( 0.00 entries/sec).
Jul 5 17:52:58 song squid[30354]: Cannot open '/usr/local/squid/var/logs/access.log' for writing. The parent directory must be writeable by the user 'nobody', which is the cache_effective_user set in squid.conf.
Jul 5 17:52:58 song squid[30324]: Squid Parent: child process 30354 exited with status 1
Jul 5 17:52:58 song squid[30324]: Exiting due to repeated, frequent failures
方法:
赋/ usr/local/squid/var/logs/ 777 权限:
[root@song squid]# chmod 777 /usr/local/squid/var/logs/
+++++++++++++++++++++++++++++++++++++++++++
2.不能识别它自己的完整可验证域名,就会报这个错
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'
visible_hostname my.host.name 192.168.77.225:80: (99) Cannot assign requested address
方法:
编辑squid.conf如下
# vim squid.conf
visible_hostname yourhostname.domain.com
+++++++++++++++++++++++++++++++++++++++++++
3.版本更新问题:
# squid.sh reload
2010/07/06 11:21:57| cache_cf.cc(362) parseOneConfigFile: squid.conf:102 unrecognized: 'httpd_accel_host'
2010/07/06 11:21:57| cache_cf.cc(362) parseOneConfigFile: squid.conf:103 unrecognized: 'httpd_accel_port'
2010/07/06 11:21:57| cache_cf.cc(362) parseOneConfigFile: squid.conf:104 unrecognized: 'httpd_accel_uses_host_header'
2010/07/06 11:21:57| cache_cf.cc(362) parseOneConfigFile: squid.conf:105 unrecognized: 'httpd_accel_with_proxy'
在 squid-2.5中,反向代理所涉及到的关键配置指令是:httpd_accel_host,
httpd_accel_port,httpd_accel_single_host,httpd_accel_with_proxy,httpd_accel_uses_host_header。httpd_accel_*这一系列的指令,在Squid-2.6中都已经去掉,取而带之的 是 cache_peer, cache_peer_domain, cache_peer_access 这三个指令
+++++++++++++++++++++++++++++++++++++++++++
4. Squid无法反向代理多个后台WEB服务器
在确保自己squid.conf配置文档没有错误的时候,查看下自己Apache的配置,很有可能是自己的Apache配置问题
5.在运行一段时间后,Squid变慢了
1. 减少cache_mem值
2. 关掉内存池,用该选项:
memory_pools off
3.清掉/usr/local/squid/var/cache中没用的内用
4.定期执行本文档中给出的clear_squid_cache.sh脚本