前几天因工作需要在RHEL4.8
上面架设了一个squid
双网代理,刚开始测试一切正常,然后就在前台负载均衡服务器把这个代理地址加上,运行一段时间后,客服反映有一些玩家无法进入游戏房间,通过cacti
监控发现大量的失败连接,正常的连接只有900
多 初步判断为linux
内核限制了连接数,通过google
一下发现linux
默认文件描述符只有1024
个,对于squid
等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,因为squid
的工作方式,文件描述符的限制可能会极大的影响性能。当squid
用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket
被关闭,squid
不能接收新请求,这样就要扩大linux
的文件描述符了 echo "ulimit -HSn 65536" >> /etcrc.local
1
,只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的 编辑/etc/security/limits.conf
文件,在最后加入如下两行 保存退出,都不需要重启服务器,直接重新登陆用ulimit -n
就能看到效果 扩大linux
的文件描述符后,再重新编译安装squid
,安装完成后,重新启用此代理,发现连接数马上就上来了 useradd -g squid -s /sbin/nologin squid
mkdir -p /cache/{cache,logs}
ulimit -HSn 65536 //
打开文件数为65536
tar - xzvf squid-2.6.STABLE9.tar.gz
./configure --prefix=/usr/local/squid --enable-snmp --enable-storeio=diskd,ufs --enable-poll
--disable-hostname-checks --enable-underscores --enable-x-accelerator-vary
--enable-kill-parent-hack --enable-err-language="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese" --disable-ident-lookups
--prefix=/usr/local/squid :
指定软件的安装路径.
--enable-snmp :
此选项可以让MRTG
使用SNMP
协议对服务器的流量状态进行监测,因此必须选择此项,使Squid
支持SNMP
接口。 --enable-storeio=diskd,ufs :
磁盘ache
的模式.
--enable-poll :
应启用Poll()
函数而不是select()
函数,通常而言poll(
轮询)
比select
要好, 但configure(
脚本程序)
已知Poll
在某些平台下失效,
若你认为你比configure
编译配置脚本程序要聪明的话, 可以用这个选项启用Poll
。总之就是用这个可以提升性能就是啦。 --disable-hostname-checks :
关闭hostname
检查;
以提高速度.
--enable-underscore :
允许解析的URL
中出现下划先,因为默认squid
会认为带下划线的URL
地址是非法的,并拒绝访问该地址。 --enable-x-accelerator-vary :Enable support for the X-Accelerator-Vary
HTTP header. Can be used to indicate
variance within an accelerator setup.
Typically used together with other code
that adds custom HTTP headers to the requests.
--enable-kill-parent-hack :
关掉suqid
的时候,要不要连同父进程一起关掉.
--enable-err-language="Simplify_Chinese"
和 --enable-default-err-languages="Simplify_Chinese" :
指定出错是显示的错误页面为简体中文.
--disable-ident-lookups :
防止系统使用RFC931
规定的身份识别方法。 --enable-cahce-digests :
加快请求时,检索缓存内容的速度。(
在squid
集群时才有用)
--enable-linux-netfilter :
可以支持透明代理for linux2.4.
--enable-arp-acl :
可以在规则设置中直接通过客户端的MAC
地址进行管理,防止客户使用IP
欺骗。(
和上一行配合用;
只有反向代理时没用).
--with-maxfd=65535 //
打开文件数为65536
tar -zxvf squid-3.0.STABLE7.tar.gz
./configure --prefix=/usr/local/squid --enable-gnuregex --enable-arp-acl --enable-auth="basic" --enable-basic-auth-helpers="NCSA" --enable-async-io=80 --enable-storeio=ufs --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cache-digests --enable-ssl --enable-delay-pools --enable-poll --enable-linux-netfilter --enable-underscore --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese"
--prefix=/usr/local/squid //
指定安装路径 --enable-arp-acl //
这样可以在规则设置中直接通过客户端的MAC
地址进行管理,防止客户使用IP
欺骗 --enable-async-io=80 //
这个主要是设置async
模式来运行squid
,我的理解是设置用线程来运行squid
,如果服务器配置很不错,有1G
以上内存,cpu
使用SMP
的方式的话可以考虑设成160
或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache
文件支持aufs
--enable-auth-modules //
此编译选项启用认证模块,可以对访问代理用户进行授权。 --enable-cache-digests //
使能缓存摘要,本来此项目的是为了在Squid
集群服务之间迅速发现缓存对象,这里在本地使用,可以加快请求时,检索缓存内容的速度。 --enable-err-language="Simplify_Chinese"
和--enable-default-err-languages="Simplify_Chinese" //
指定出错是显示的错误页面为简体中文 --enable-delay-pools //
此选项使能一个延时池,这样能对某些特定的请求限制额定带宽。 --enable-gnuregex //
由于Squid
大量使用字符串处理做各种判断,加此项能更好处理。 --enable-icmp //
加入icmp
支持 --disable-ident-lookups //
防止系统使用RFC931
规定的身份识别方法。 --enable-kill-parent-hack //
关掉suqid
的时候,要不要连同父进程一起关掉,这个当然要啦 --enable-linux-netfilter //
允许使用Linux
的透明代理功能。 --enable-poll //
应启用Poll()
函数而不是select()
函数,通常而言poll(
轮询)
比select
要好,但configure(
脚本程序)
已知Poll
在某些平台下失效,
若你认为你比configure
编译配置脚本程序要聪明的话,可以用这个选项启用Poll
。总之就是用这个可以提升性能就是啦。 --enable-snmp //
此选项可以让MRTG
使用SNMP
协议对服务器的流量状态进行监测,因此必须选择此项,使Squid
支持SNMP
接口。 --enable-storeio=ufs,null //
使用的文件系统通常是默认的ufs
,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上null
文件系统。 --enable-underscore //
允许解析的URL
中出现下划先,因为默认squid
会认为带下划线的URL
地址是非法的,并拒绝访问该地址。 chown -R squid.squid /cache/cache
chown -R squid.squid /cache/logs
vi /usr/local/squid/etc/squid.conf
cache_mgr kerryhu@163.com
maximum_object_size_in_memory 10 MB
memory_replacement_policy lru
cache_replacement_policy lru
cache_dir ufs /cache/cache 8000 32 128
maximum_object_size 300 MB
cache_log /cache/logs/cache.log
error_directory /usr/local/squid/share/errors/Simplify_Chinese
/usr/local/squid/sbin/squid -z //
测试Squid
运行状况 /usr/local/squid/sbin/squid start //
启动squid
Echo “/usr/local/squid/sbin/squid start” >> /etc/rc.local
/usr/local/squid/sbin/squid -k reconfigure –f /usr/local/squid/etc/squid.conf //
重新加载配置文件 本文转自king_819 51CTO博客,原文链接:http://blog.51cto.com/kerry/300757,如需转载请自行联系原作者