首先描述下硬件环境cpu P4 2.93\2G\80G 单网卡;系统环境为CentOS 5.4 x86_64,所需的squid由yum安装,squid包的版本为squid-2.6.STABLE21-6.el5.
部署完成后,能成功实现透明代理,如下将贴出配置内容,并且在最后将贴出部分参数的解释优化(不针对透明代理),作为以后一个参考内容;我个人也是在不断磨合,学习,所以也希望看到的朋友如果觉得哪些地方参数等需要进一步的调整优化,请指出,感激不尽!
vi /etc/squid/squid.conf
http_port 192.168.1.6:3128 transparent
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 #https
acl Safe_ports port 53 #dns
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl mynet src 192.168.1.0/255.255.255.0
http_access allow mynet
http_access deny all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow all
http_reply_access allow all
icp_access allow all
hierarchy_stoplist cgi-bin ?
cache_mem 512 MB
cache_dir ufs /var/spool/squid 10240 16 256
maximum_object_size_in_memory 256 KB
maximum_object_size 2048 KB
cache_swap_low 88
cache_swap_high 93
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log squid
cache_store_log /var/log/squid/store.log squid
emulate_httpd_log on
pid_filename /var/run/squid.pid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_mgr [email protected]
cache_effective_user squid
cache_effective_group squid
visible_hostname ips_squid
udp_incoming_address 0.0.0.0
# udp_outgoing_address 255.255.255.255
dns_nameservers 211.147.6.3
coredump_dir /var/spool/squid
下面是iptables的脚本,此脚本作用关键是重定向80端口,其他规则则允许内网所有包通行,如有相关限制,可再写.
#!/bin/bash
#Filename: firewall
IPS=/sbin/iptables
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPS -F
$IPS -X
$IPS -Z
$IPS -F -t nat
$IPS -X -t nat
$IPS -Z -t nat
$IPS -P INPUT DROP
$IPS -P OUTPUT DROP
$IPS -P FORWARD DROP
$IPS -t nat -A PREROUTING -s 192.168.1.0/24 -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
$IPS -t filter -A INPUT -s 127.0.0.1 -j ACCEPT
$IPS -t filter -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$IPS -t filter -A INPUT -s 192.168.1.0/24 -j ACCEPT
$IPS -t filter -A INPUT -i eth0 -j ACCEPT
$IPS -t filter -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
$IPS -t filter -A OUTPUT -o eth0 -j ACCEPT
#$IPS -t nat -A POSTROUTING -o eth0 -j MASQUERADE
###########################################################################
如下为squid相关优化可做参考,源链接为:http://bbs.linuxtone.org/thread-1107-1-1.html
squid 2.6 编译优化参数
*NIX将TCP/IP也作为文件来访问
而squid 2.6默认的访问文件数是1024
作为运营环境使用.就需要修改最大打开文件数
配置时加上?with-maxfd 参数即可
存储方式使用aufs会加快访问速度.因为使用非同步方式
打开snmp,这样可以从cacti之类的snmp软件中获取相关squid的参数进行监控
打开大文件支持.允许日志文件超过2G
./configure --prefix=/usr/local/squid --with-maxfd=65535 --enable-storeio=aufs,ufs --enable-snmp ?with-large-files
补充 另外还需要设置 ulimit 打开文件数
ulimit 参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
一般可以设置 ulimit -SHn 65535
请注意,该命令只在当前shell环境下有效,而且只能由root权限来设置,一般可以放在需要启动服务的命令脚本里,另外,如果你是用root登录来启 动服务的话,防止忘记这条命令,一般可以设置在~/.root 下的 .bash_profile 文件中,不建议在/etc/profile 中设置,因为该命令只有root用户有权限将数字增加到超过系统默认的上限(比如 -n 打开文件数 1024 )。
在Linux 环境下默认编译squid(2.6)这个数字是1024,这是受到操作系统默认设置限制的,可以查看一下
/usr/include/bits/typesizes.h
/usr/include/bits/nptl/typesizes.h
/usr/include/linux/posix_types.h
中的 __FD_SETSIZE
查看 当前 squid 能够打开的最大文件句柄数和目前已经打开的数字用以下命令查看最后一段信息
squidclient -p 80 mgr:info
增加一个选项
?with-large-files
当日志文件超过2G后,如果没有这个选项,会导致squid退出
squid代理服务的配置与优化
主要是/opt/bokee/squid/etc/squid.conf文件参数的配置:
#缓存用户UID
cache_effective_user nobody
#缓存用户组 GID
cache_effective_group nobody
#代理服务器的高速缓存;系统默认8M;注意,如果您的机器有N兆内存,那么,推荐您在这里添的数字是N/3。
cache_mem 768 MB
#定义缓冲区
#type: 为存储内型(ufs和asyncufs以及diskd等,ufs使用较多);
#/opt/bokee/squid/cache: 缓冲目录的路径
#8196M: 目录空间大小
#64: 第一层缓冲目录数
#256: 第一层目录下的每一个目录所包含的目录数
cache_dir diskd /opt/bokee/squid/cache 10240 16 256 Q1=72 Q2=64
#将cache目录的所有者更改为nobody
#chown -R nobody:nobody /opt/bokee/squid/cache
关于Cache目录的建议:
由于cache目录是经常的读写,所以最好硬盘能用SCSI的,速度比较快而且稳定。
如果我们的cache大概需要40G的大小,那么我们尽量使用多硬盘,不要当纯用一个40G的硬盘,
可以使用4个10G的硬盘,这样,对于cache的速度更快。比如,当你有10M的东西要写到cache中,
如果是只是用一个硬盘的话,虽然可能你已经将4个cache目录分别放在4个分区,可是你只有一个硬盘,同时只有一个在写入,
可是当你有4个硬盘的时候,你每个硬盘就只要写入2.5M的东西,那样是不是更快呢?
还有,建议将每个cache目录单独存放在一个分区中,分区不要划分太大,一般2至4G就行,这样proxy搜索资料的时候不用耗费太多的时间。
#icp_port参数指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
#这里设置为0是因为这里配置Squid为内部Web服务器的加速器,所以不需要使用邻居服务器的缓冲。
icp_port 0
#swap 性能微调
#有时候由于用户的不正常操作,可能会使与squid的TCP连接处于半关闭状态,这时候,该TCP连接的发送端已经关闭,而接收端正常工作。
#默认时,该值设为on. squid将一直保持这种处于半关闭状态的TCP连接,直到返回套接字的读写错误才将其关闭。
#如果将该值设为off,则一旦从客户端 返回“no more data to read”的信息,squid就立即关闭该连接
half_closed_clients off
#squid使用大量的交换空间来存储对象。过了一定的时间以后,该交换空间就会用完,
#所以还必须定期的按照某种指标来将低于某个水平线的对象清除。 squid使用所谓的“最近最少使用算法”(LRU)来做这一工作。
#当已使用的交换空间达到cache_swap_high时,squid就根据LRU所计算的得到每个对象的值,将低于某个水平线的对象清除。
#这种清除工作一进行到已用空间达到cache_swap_low。这两个值用百分比表示,
#如果所使用的交换空间很大的话,建议减少这两个值得差距,因为这时一个百分点就可能是几百兆空间,这势必影响squid的性能。
#默认为:90-95(大于95会造成不稳定)
cache_swap_high 93
cache_swap_low 88
#maximum_object_size 大于该值的对象将不被存储。如果想要提高访问速度,就请降低该值;如果想最大限度地节约带宽,降低成本,请增加该值。
#默认值为:4096 KB
maximum_object_size 2048 KB
#以下是系统默认值
minimum_object_size 0 KB
#在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中
maximum_object_size_in_memory 256 KB
#reference_age 3 months
squid根据对象的LRU(最近最少使用算法)来清除对象,squid依据使用磁盘空间的总量动态地计算对象的LRU年龄。
我们用 reference_age定义对象的最大LRU年龄。如果一个对象在指定的reference_age内没有被访问,squid将删除该对象。默认值为一个月。
可以使用如下所示的时间表示方法。
1 week
3.5 days
4 months
2.2 hours
#定义all名为所有ip
acl all src 0.0.0.0/0.0.0.0
#dstdomain指代理服务器代理的主机. 定义bolg名为所有一下的域名的主机
acl blog dstdomain .blogchina.com
acl blog dstdomain localhost
acl blog dstdomain .bokee.com
#允许blog类使用代理服务器
http_access allow blog
#允许使用代理服务器(中间件被其它的squid调用)
#icp_access allow all
#acl denywords url_regex -i sex
#http_access deny badwords
#以上2句不允许使用该缓存服务器访问URL正则表达式中含sex字样的URL
hierarchy_stoplist .jsp Ctrl
acl QUERY urlpath_regex .jsp Ctrl
no_cache deny QUERY
#以上3句不缓存url中有.jsp或Ctrl的页面;直接访问主机.
#默认用户禁止使用代理服务器
http_access deny all
#客户端代理端口(本机的公网ip)
http_port ***.***.***.***:80 vhost vport
### httpd 透明代理设置
#squid2.5
#反向代理的WEB服务端口号。
httpd_accel_port 80
#此处设置反向代理的主机名,如果对后面多个域名进行缓冲,请使用虚拟主机模式(hosts文件中)。
httpd_accel_host virtual(127.0.0.1单个域名时;直接用ip而不用virtual;但须加httpd_accel_single_host on)
或用dns服务器: #dns_nameservers 60.191.254.49
#此处设置开反向代理的同时,是否开普通代理缓存服务。
#如果这行不注释掉,就没有高速缓存功能。不正向代理(不让外面用)就off;默认为on
httpd_accel_with_proxy off
#设定http1.1协议支持
httpd_accel_uses_host_header on
#squid2.6反向代理
cache_peer 127.0.0.1 parent 80 0 no-query originserver
#发生错误时,生成提示所显示的缓存服务器名
visible_hostname www.bokee.com
#发生错误时,生成提示所显示的缓存服务器管理员名
#cache_mgr [email protected]
#打开“emulate_httpd_log”选项,将使Squid仿照Web服务器的格式创建访问记录。
#如果希望使用Web访问记录分析程序,就需要设置这个参数. 默认为off
emulate_httpd_log on
#不写日志
cache_access_log none
cache_log none
cache_store_log none
#写日志
#cache_store_log /var/log/squid/store.log
#cache_access_log /var/log/squid/access.log
#cache_log /var/log/squid/cache.log
#客户端不持续连接
client_persistent_connections off
#设置snmp监控的共同体有密码为123; 默认为public
acl snmppublic snmp_community 123
#设置snmp监控端口;默认为3401
snmp_port 3401
#允许所有的计算机访问snmppublic;默认为all
snmp_access allow snmppublic all
#时间设置
#消极存储对象的生存时间。所谓的消极存储对象,就是诸如“连接失败”及404 Not Found等一类错误信息。默认为:5 minutes。
negative_ttl 1 minutes
#缓存失败的D N S查询结果的生存时间。默认为5min。
negative_dns_ttl 1 minutes
#缓存成功的DNS查询结果的生存时间。默认为6小时。
positive_dns_ttl 1 hours
#在建立与客户的连接后, squid将花多长时间等待客户发出HTTP请求。默认值为30s。
request_timeout 1 minutes
#squid等待连接完成的超时值。默认值为2min。
connect_timeout 1 minutes
#持续连接时间。默认值为1min。
persistent_request_timeout 1 minutes
#squid在与其他服务器和代理建立连接后,该连接闲置多长时间后被关闭。默认值为120秒。
pconn_timeout 1 minutes
配置SQUID,对动态内容强制CACHE,用到的配置参数是refresh_pattern
refresh_pattern ^/forum/viewthread.php 1440 1000% 1440 ignore-reload
/forum/viewthread.php的内容将强制保持1天
有些频繁更新的页面可以不CACHE,用no_cache参数
acl no_forum_cache urlpath_regex ^/forum/forumdisplay.php
no_cache DENY no_forum_cache