Jquery中文网 www.jquerycn.cn
Jquery中文网 >  服务器技术  >  应用加速  >  正文 squid3.x透明代理配置详解

squid3.x透明代理配置详解

发布时间:2014-07-20   编辑:www.jquerycn.cn
squid3.x透明代理配置详解

一、配置
 

复制代码 代码如下:
#./configure --prefix=/usr/local/squid3 //指定软件的安装路径
--disable-internal-dns //使用自己内部DNS查询
--disable-ident-lookups //防止系统使用RFC931规定的身份识别方
--disable-carp //Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluste
--disable-wccp //用于阻止或分发HTTP请求到一个或多个caches
--enable-gnuregex //支持GNU正则表达式
--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
--enable-icmp //加入ICMP支持
--enable-kill-parent-hack //关掉squid的时候,要不要连同父进程一起关掉
--with-maxfd=65535 //指定最大文件描述
--with-dl //
--with-large-files //
--enable-poll //指定使用Poll()函数,提升性能就是啦
--enable-linux-netfilter //可以支持透明代理
--enable-large-cache-files //开启大文件支持,支持2GB以上的文件
--enable-delay-pools //开启squid延时池功能
--enable-snmp //此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口
--enable-underscore //允许解析的URL中出现下划线,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址
--enable-arp-acl //可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗
--enable-cache-digests //加快请求时,检索缓存内容的速度
--enable-err-language=”Simplify_Chinese” //
--enable-default-err-languages=”Simplify_Chinese” //指定出错是显示的错误页面为简体中文

二、修改配置文件
新建一个用于运行squid的用户和组:
 

复制代码 代码如下:
#groupadd squid
#useradd –g squid –s /sbin/nologin squid
修改/usr/local/squid3/var/目录的属主和属组为squid
#chown squid:squid /usr/local/squid3/var/
开启NAT转发功能(透明代理需要开启内核的路由转发功能,普通代理则不需要)
 

方法一:修改/proc下内核参数文件内容
直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward,该文件默认值是0是禁止IP转发,修改为1即开启IP转发功能。修改命令如下:
 

复制代码 代码如下:
#echo 1 > /proc/sys/net/ipv4/ip_forward


修改后就马上生效,即内核已经打开IP转发功能。但如果系统重启后则双恢复为默认值0,如果想永久打开需要通过修改/etc/sysctl.conf文件的内容来实现。

方法二:修改/etc/sysctl.conf文件
默认sysctl.conf文件中有一个变量是
net.ipv4.ip_forward = 0
将后面的值改为1,然后保存文件。因为每次系统启动时,初始化脚本/etc/rc.d/rc.sysinit会读取/etc/sysctl.conf文件的内容,所以修改后每次系统启动时都会开启IP转发功能。但只是修改sysctl文件不会马上生效,如果想使修改马上生效可以执行下面的命令:
#sysctl –p

修改配置文件

复制代码 代码如下:
http_port 3128 transparent//设定Squid的代理端口和开启透明代理(加上IP地址,squid就不会监听外部的网络接口)
cache_mem 256 MB//指定squid可以使用的RAW,一般配置为物理内存的1/3或1/2
cache_effective_user squid//设定用于运行squid的帐户和组
cache_effective_group squid//
cache_dir ufs /usr/local/squid3/var/cache 10240 16 256//磁盘缓存目录,10GB缓存空间,16个目录,256个子目录
cache_dir ufs /data/cache 10240 16 156//可以设置多个磁盘缓存目录
cache_swap_low 90  //指定进行空间交换的空间比(缓存数值超过或低于某个百分比时和交换空间进行数据交换)
cache_swap_high 95  //
cache_access_log /usr/local/squid3/var/logs/access.log//客户端访问日志
cache_log /usr/local/squid3/var/logs/cache.log//缓存访问情况
cache_store_log /usr/local/squid3/logs/store.log//网页调用情况
cache_mgr liuyaof@fuch.net//管理者的电子邮件,出现在错误页面中
visible_hostname srv.fuch.com//设定squid的主机名,如无此项squid将无法启动(可以是IP地址,也可以是主机名)
dns_nameservers 172.16.0.2//使用内部DNS(可以不用设置)
maximum_object_size 10 MB//大于此容量的对象将不会保存到磁盘上,默认设置为4MB,过大的文件在下次重启后需要重新获取
maximum_object_size_in_memory 2 MB//最大位于内存对象的大小,默认大小8K,依服务器内存大小来定
reply_body_max_size 10240000 allow all//禁止下载超过10M的文件
 

保存退出

验证squid.conf的语法和配置:
 

复制代码 代码如下:
#/usr/local/squid3/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目录。
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –z


前台启动squid,查看是否报错:
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –N –d1



2010/07/06 05:42:44| Ready to serve requests.


 

看到有上面那句就可以试着启动squid了

透明代理设置(eth0是内部网卡,eth1是外部网卡)
Squid要使用透明代理功能的话,在配置安装时必须在加上
--enable-linux-netfilter这个选项,还必须要开启内核的路由转发功能(前面已经有开启)
配置iptables
 

复制代码 代码如下:
把80端口的包全部转向3128端口:
#iptables –t nat –A PREROUTING –i eth0 –p tcp --dport 80 –j REDIRECT --to-ports 3128
动态地址转换:
#iptables –t nat –A POSTROUTING –o eth1 –j MASQUERADE
保存iptables:
#service iptables save
重启iptables:
#service iptables restart
 

透明代理中一定要把客户端的网关设置成squid的内部网卡IP,否则无法正常代理
客户端还需要设置一个有效的DNS,普通代理则不需要

三、Squid语法
1、启动squid服务:
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –s


2、停止squid服务
 

复制代码 代码如下:
#/usr/loca/squid3/sbin/squid –k shutdown
 

3、Squid用法帮助信息
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –h


4、在初次运行squid之前,或者无论何时你增加了新的cache_dir,你必须初始化cache目录
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –z


5、重配置运行中的squid最好的方法是使用squid –k reconfigure命令
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –k reconfigure


6、周期性的滚动日志文件,以阻止它们变得太大
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –k rotate


7、在前台启动squid,并输出启动过程
 

复制代码 代码如下:
#/usr/local/squid3/sbin/squid –N –d1


8、可以根据这个测试命令来验证squid.conf的语法和配置
#/usr/local/squid3/sbin/squid –k parse

四、squid优化
1、日志周期性滚动:(在每月每周每天的4点执行日志周期性滚动)
 

复制代码 代码如下:
0 4 * * * /usr/local/squid3/sbin/squid –k rotate &

2、Log目录周期性检查:
0 4 * * 6 /usr/local/squid3/movelog.sh &
脚本内容如下:movelog.sh
 

复制代码 代码如下:
#!/bin/bash
SLOG=`du –sh /usr/local/squid3/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/squid3/var/logs/ /var/log/squid
echo “move squid log to /var/logs” | mail –s liuyaof@fuch.net
fi
else
echo “The size of /usr/local/squid3/var/logs/ is `du –sh /usr/local/squid3/var/logs/ | awk ‘{print $1}’ | awk –F ‘M’ ‘{print $1}’`”
fi

3、cache周期性优化
0 4 * * * /usr/local/squid3/clear_squid_cache.sh gif &
0 4 * * * /usr/local/squid3/clear_squid_cache.sh swf &
0 4 * * * /usr/local/squid3/clear_squid_cache.sh gif &
脚本内容如下:
 

复制代码 代码如下:
#cat clear_squid_cache.sh
#!/bin/bash
squidcache_path="/usr/local/squid3/var/cache"
squidclient_path="/usr/local/squid3/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
 

+++++++++++++++++++++++++++++++++++++++++++++++
Squid脚本:
 

复制代码 代码如下:
#cat /usr/local/squid3/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脚本用法:
 

复制代码 代码如下:
清除所有Flash缓存(扩展名.swf)
#/usr/local/squid3/clear_squid_cache.sh swf
Squid.sh脚本用法:
/usr/local/squid3/sbin/squid.sh | squid.sh start | stop | status | restart | reload

六、常见问题
在运行一段时间后,squid变慢了
1、减少cache_mem值
2、关掉内存池,用该选项:
memory_pools off
3、清掉/usr/local/squid3/var/cache中没用的内存
4、定期执行文档中给出的clear_squid_cache.sh脚本

八、实例

复制代码 代码如下:
禁止终端用户在任何客户机上下载文件扩展名为mp3、exe、zip和rar类型的文件
acl badfile urlpath_regex –i .mp3$ .exe$ .zip$ .rar$ .rmvb$ .rm$ .mp4$ ……
http_access deny badfile
禁止客户机IP地址在192.168.2.0子网的所有终端客户在星期一到星期五的9:00到18:00访问Internet资源
acl clientnet src 192.168.2.0/24
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet worktime
限制IP地址为192.168.1.102的客户机并发连接的最大连接数为5
acl clientip src 192.168.1.102
acl clientmaxconn maxconn 5
http_access deny clientip clientmaxconn
禁止所有终端用户访问域名包含为google.com的网站
acl badurl url_regex –i google.com
http_access deny badurl
禁止所有终端用户访问域名为www.google.com的网站
acl baddomain dstdomain –i www.google.com
http_access deny baddomain

您可能感兴趣的文章:
squid3.x透明代理配置详解
squid反向代理配置(web服务器的前端内容缓存器)
squid2.6反向代理实验模型
RHEL5配置Squid透明代理服务器过程解析
nginx配置反向代理的简单示例
BIND9 DNS配置详解
squid反向代理服务器加速web
jQuery 使用手册(五)
jquery sortable的拖动方法示例详解
squid2.5配置详解+认证

[关闭]