快捷搜索:   nginx

Linux squid 2.6 透明代理配置

一、前期准备

1、建立squid用户和组

groupadd squid
useradd -g squid squid

2、建立squid缓存以及日志目录

mkdir /var/squidcache1

mkdir /var/squidcache2

chown -R squid.squid /var/squidcache1

chown -R squid.squid /var/squidcache2

mkdir /var/log/squid

chown -R squid.squid /var/log/squid/

二、编译安装squid

tar zxvf squid-2.6.STABLE17.tar.gz

cd squid-2.6.STABLE17
./configure --prefix=/usr/local/squid --enable-dlmalloc --enable-poll --enable-snmp \

--enable-removal-policies="heap,lru" --enable-storeio="aufs,coss,diskd,null,ufs" \
--disable-internal-dns --enable-gnuregex --enable-async-io=160 \

--enable-icmp --enable-kill-parent-hack --disable-ident-lookups --enable-cahce-digests \

--enable-arp-acl --enable-linux-netfilter --enable-underscore --enable-useragent-log

make

make install

chown -R squid.squid /usr/local/squid/

注释:

编译参数的解释在最后面附录中

三、设定squid文件(vi /usr/local/squid/etc/squid.conf)

1、 运行参数

http_port 172.21.41.15:3128 transparent
cache_mem 512 MB

cache_swap_low 85

cache_swap_high 95

cache_dir aufs /var/squidcache1 6000 16 256

cache_dir aufs /var/squidcache2 6000 16 256

maximum_object_size 4096 KB

refresh_pattern .               0       20%     4320

range_offset_limit 0 KB

coredump_dir /var/log/squid

注释:

(1)http_port 3128 transparent 支持透明代理模式

(2)cache_mem不用太高一般100多用户只要256-512MB就可以了,因为设置的过高了,还有很多的其他元素,比如cpu、硬盘等等

(3)cache_swap_low 85

cache_swap_high 95

经过实际的测试发现还是留个10%的余地比较好

(4)这里我把总的cache设置成6×2G 而且分2个目录,有助于提高读写的性能(这里主要是系统的限制)

(5)maximum_object_size 4096 KB 最大缓存文件为4M

(6)squid安装完毕后的默认 refresh_pattern .        0       20%     4320

   上一句的判断是(4320-0)*20% 分钟=14.4小时 因为min=0所以第一条件判断不起作用

具体的判定是根据以下策略和优先次序

If ((CURRENT_DATE-DATE(就是LM里定义的时间)) < min),cache是新鲜的
else if ((CURRENT_DATE-DATE) < (min + (max-min)*percent),cache是新鲜的
else cache是过期的

(7)range_offset_limit 0 KB 对于多线程的下载squid默认是不缓存

如果要设置range_offset_limit 请参照maximum_object_size的值 可以考虑设置成1/10

(8) coredump_dir /var/spool/squid (squid挂掉后,临终遗言要放到哪里。不用管,一般人看不懂)

2、控制acl策略
acl inside src 172.21.41.0/24

# acl BadSites url_regex "/usr/local/squid/etc/badsites"

# acl worktime time SMTWHFA 7:40-12:00 13:00-21:00

# acl rmfilm url_regex .rmvb

# http_access deny BadSites

http_access allow inside

http_access deny all

注释:

(1)         总的控制acl策略的最后一定是http_access deny all即拒绝

(2)         首先是acl inside src 172.21.41.0/24定义然后是http_access allow inside许可

(3)         acl BadSites url_regex "/usr/local/squid/etc/badsites" 这个是一个文本,主要放不许可的url内容

(4)         如果要控制时间 http_access allow inside worktime 就可以他们之间的关系是与的关系

(5)         /usr/local/squid/etc/badsites放需要屏蔽的网站,每个一行,同时这个文件的权限为squid

(6)         1个访问条目中的所有元素将用逻辑与运算连接:

http_access Action 声明1 AND 声明2 AND 声明3

OR.
    http_access Action 声明4
多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。

(7)         也可以设定workurl 项来把许可可以访问的网站放里面,

可以划分几个用户的组比如 vip nom low,

可以把low 限制为只许可访问的站点。

http_access allow low workurl

Nom限制为不能下载相关项

http_access deny nom download

。。。。。。可以做尝试

 
3、squid的运行用户及组

pid_filename /var/run/squid.pid

cache_effective_user squid
cache_effective_group squid

4、控制缓存等

acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi

acl download urlpath_regex -i \.avi$ \.rmvb$ \.rm$ \.ra$ \.ram$ \.mpe$ \.smi$

cache deny QUERY

cache deny download

注释:

(禁止 cgi-bin等动态内容的缓存 禁止常用影视格式的大容量文件缓存)

5、日志存储

debug_options ALL,1

access_log /var/log/isquid/access.log

cache_log /var/log/squid/cache.log

#cache_store_log /var/log/squid/store.log

cache_store_log none

logfile_rotate 30

注释:

(1)debug_options ALL,1   1详细程度为最低的

(2)logfile_rotate 30 日志循环为30天(根据每个人自己实际情况定义)

(3)以下为禁止access.log或者store.log:
cache_access_log/dev/null
cache_store_log none
cache_log /dev/null

6、相关时间参数

client_lifetime 15 minutes

read_timeout 3 minutes

half_closed_clients off

request_timeout 1 minutes

注释: 

client_lifetime 1 day
说明:设置客户在与squid建立连接后,可以把该连接保持多长时间。注意,因为客户建立的每个连接都会消耗一定的系统资源,所以如果你是为一个大型网络 提供代理服务的话,一定要正确地修改该值。因为如果同一时间的连接数量太大的话,可能会消耗大量的系统资源,从而导致服务器宕机。缺省值为1天,该值太大 了,建议根据你自己的情况适当减小该值。
read_timeout time-units
说明:如果在指定的时间内squid尚未从被请求的服务器读入任何数据,则squid将终止该客户请求。缺省值为15分钟。

half_closed_clients on/off
说明:有时候由于用户的不正常操作,可能会使与squid的TCP连接处于半关闭状态,
这时候,该TCP连接的发送端已经关闭,而接收端正常工作。缺省地,squid将一直保持这种处于半关闭状态的TCP连接,直到返回套接字的读写错误才将 其关闭。如果将该值设为off,则一旦从客户端返回“no more data to read”的信息,squid就立即关闭该连接。

request_timeout:

说明:设置在建立与客户的连接后,squid将花多长时间等待客户发出HTTP请求。默认为5分钟,设置为1分钟。

四、建立缓存并运行

/usr/local/squid/sbin/squid -z

/usr/local/squid/sbin/squid -k parse

看一下 是不是正确,如果没有语法错误会没有提示
/usr/local/squid/sbin/squid -N -d1
看是否有错。。。。不过当前控制台会死掉的

另开一个控制台运行

/usr/local/squid/sbin/squid -k shutdown

关掉squid相关进程

ps -aux|grep squid

一定要没有相关的squid进程才能继续下一步,如果有相关的进程,kill –9 吧

chown squid.squid /usr/local/squid/var/squid.out

chown squid.squid /var/run/squid.pid

以后运行squid使用以下语句

su squid -c "/usr/local/squid/bin/RunCache &"

并把上述命令加到/etc/rc.local中
测试一下是否有进程
ps -aux|grep squid

循环squid的日志

crontab -e

40 23 * * * /usr/local/squid/sbin/squid -k rotate

每天晚上23:40分开始循环squid的日志

     注释:

acl myacl src "/path/to/acl/filename" 可以将长的源地址放置在文件里,每个地址一行
   acl myacl2 arp "/path/to/acl/filename"放置网卡的物理地址到一个文件里,每个地址一行
      1.当更改过配置文件后最好验证一下配置文件:squid -k parse
     2.记得创建缓存目录,而且要设置好var的目录权限为cache_effective_user参数中所指定的用户

附录:编译选项的解释:
--prefix=/usr/local/squid :指定软件的安装路径

--enable-dlmalloc[=LIB]

在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。

--enable-poll :应启用Poll()函数而不是select()函数,通常而言poll(轮询)比select要好,但configure(脚本程序)已知Poll在某 些平台下失效, 若你认为你比configure编译配置脚本程序要聪明的话,可以用这个选项启用Poll。总之就是用这个可以提升性能就是啦。

--enable-snmp :此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。

--enable-removal-policies="heap,lru"排除策略是squid 需要腾出空间给新的cache目标时,用以排除旧目标的机制。排除策略:最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。

Squid内部DNS功能是否禁止 --disable-internal-dns ,也就是说,如果不带上禁止选项的话,Squid代理服务器在 程序内部实现DNS解析,不会检查/etc/hosts文件,直接根据/etc/resolv.conf中列出的DNS服务器的顺序进行DNS解析,这样 有个毛病就是不能代理对内部网段上服务器的访问了。

(我个人认为,如果是透明代理的模式,客户端的dns是在客户端自己设置的,如果直接设置的外部dns地址,那么跟squid服务器的dns配置根 本没关系,因为是先udp53找地址,然后在tcp80转发到3128交给squid处理的吧,所以我都是把squid服务器配置成纯缓存dns服务器 的,然后再配置dns的多线程,就是在客户端填写的dns是squid的ip¸因为它同时也是一个纯缓存的bind服务器,这样相关项我都交给了bind 处理,避免了hosts的问题,而内网自己定义的问题,都有dns了大不了就+上去了。但是如果在ie中直接就把代理设置成squid的地址的机器,以上 的设置是起作用的,就不要设置自己的dns,处理hosts好了)

--enable-gnuregex :由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理。

--enable-async-io=160 :这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方 式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs 。请注意--enable-async-io是打开其他三个./configure选项的快捷方式,它等同于:

          --with-aufs-threads=N_THREADS

--with-pthreads

--enable-storeio=ufs,aufs

--with-pthreads:该选项导致编译过程链接到你系统中的P线程库。aufs存储模块是squid中唯一需要使用线程的部分。通常来说,如果你使用--enable-saync-io选项,那么不必再单独指定该选项,因为它被自动激活了。

--enable-icmp :加入icmp支持

--enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦

--disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。

--enable-cahce-digests :加快请求时,检索缓存内容的速度。

--enable-arp-acl:squid在一些操作系统中支持ARP,或者以太地址访问控制列表。该代码使用非标准的函数接口,来执行ARP访问控制列表,所以它默认被禁止。假如你在linux或solaris上使用squid,你可能用的上这个功能。

--enable-err-language="Simplify_Chinese" 和 --enable-default-err-languages="Simplify_Chinese" :指定出错是显示的错误页面为简体中文,不建议使用

--enable-linux-netfilter :可以支持透明代理


--enable-underscore :允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址。


--enable-truncate (没必要)


truncate()系统调用是unlink()的替代品。unlink()完全删除cache 文件,truncate()将文件大小设为零。这样做释放了分配给该文件的磁盘空间,但留下适当的目录接口。该选项存在的理由是,某些人相信(或希 望)truncate()比unlink()性能表现更好。然而,压力测试显示两者有很少的或根本没有区别。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论