虚拟化容器,大数据,DBA,中间件,监控。

squid代理服务的配置与优化

06 09月
作者:admin|分类:应用管理
                                                         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

#客户端代理端口
http_port 80

### httpd 透明代理设置
#反向代理的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

#发生错误时,生成提示所显示的缓存服务器名
visible_hostname squid.bokee.com

#发生错误时,生成提示所显示的缓存服务器管理员名
#cache_mgr jhzhou@bokee-inc.com

#打开“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
-=----------------
CLOSE_WAIT状态的生成原因
首先我们知道,如果我们的Client程序处于CLOSE_WAIT状态的话,说明套接字是被动关闭的!
因为如果是Server端主动断掉当前连接的话,那么双方关闭这个TCP连接共需要四个packet:
       Server  --->  FIN  --->  Client
     Server  <---  ACK  <---  Client
    这时候Server端处于FIN_WAIT_2状态;而我们的程序处于CLOSE_WAIT状态。
       Server  <---  FIN  <---  Client
这时Client发送FIN给Server,Client就置为LAST_ACK状态。
        Server  --->  ACK  --->  Client
Server回应了ACK,那么Client的套接字才会真正置为CLOSED状态。
 
我们的程序处于CLOSE_WAIT状态,而不是LAST_ACK状态,说明还没有发FIN给Server,那么可能是在关闭连接之前还有许多数据要发送或者其他事要做,导致没有发这个FIN packet。
原因知道了,那么为什么不发FIN包呢,难道会在关闭己方连接前有那么多事情要做吗?
还有一个问题,为什么有数千个连接都处于这个状态呢?难道那段时间内,服务器端总是主动拆除我们的连接吗?
不管怎么样,我们必须防止类似情况再度发生
浏览3053 评论0
返回
目录
返回
首页
smoothwall server 3 注册码 DbVisualizer 添加Oracle jdbc 驱动