Squid 3.0 反向代理安装笔记(Linux) (一)

2009年5月11日星期一

Squid 3.0 反向代理安装笔记(Linux) (一)

反向代理服务器位于本地WEB服务器和Internet之间,如下图所示:
当用户浏览器发出一个HTTP请求时,通过域名解析将请求定向到反向代理服务器(如果要实现多个WEB服务器的反向代理,需要将多个WEB服务器的域名都指向反向代理服务器)。由反向代理服务器处理器请求。反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP之类的程序不缓存。它根据从WEB服务器返回的HTTP头标记来缓冲静态页面
三.环境

操作系统:CentOS5.2
Squid:squid-3.0.STABLE13

四.准备1.可以用下述命令获得squid
wgethttp://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz
2.建立squid用户
useraddsquid-M-cSquiduser-d/dev/null-s/sbin/nologin
3.配置参数详解

--prefix=/usr/local/squid3:
指定squid日志,二进制文件和配置文件的默认位置,squid会将var目录也放在这下面,在这个目录下面会有日志文件,日志文件通常会很大,因此建议将其放在较大的磁盘下面,你可以使用localstatedir选项。
--localstatedir=/bigdisk/var
指定var目录的安装位置
--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。请http://g.oswego.edu/dl/html/malloc.html更多关于dlmalloc的信息。
--enable-gnuregex
在访问控制列表和其他配置指令里,squid使用正则表达式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,你可以将这个选项加到./configure命令后。
--enable-async-io[=N_THREADS]
异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统中。=N_THREADS参数改变squid使用的线程数量。aufs在多cup系统上优势更为明显,设置的线程数量不要过多。squid默认根据缓存目录的数量,自动计算需要使用多少线程。
--enable-removal-policies='heap,lru'
排除策略是squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。squid-2.5支持3个排除策略:最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。。LRU是默认的,它以双链表数据结构执行。
--enable-delay-pools
延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工延迟。
--enable-snmp
简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMUSNMP库。
--enable-cachemgr-hostname[=hostname]
cachemgr是一个CGI程序,你能使用它来管理查询squid。默认cachemgr的hostname值是空的,但你能使用该选项来指定一个默认值
--enable-htcp
HTCP是超文本缓存协议--类似于ICP的内部缓存协议。
--enable-ssl
使用该选项赋予squid终止SSL/TLS连接的能力。注意这仅仅工作在web加速器中用以加速请求。
--with-openssl[=DIR]
假如必要,你使用该选项来告诉squid到哪里找到OpenSSL库或头文件。假如它们不在默认位置,在该选项后指定它们的父路径。例如:
%./configure--enable-ssl--with-ssl=/opt/foo/openssl
在这个例子中,你的编译器将在/opt/foo/openssl/include目录中找头文件,在/opt/foo/openssl/lib中找库文件。
--enable-cache-digests
Cache消化是ICP的另一个替代,但有着截然不同的特性。
--enable-err-languages=Simplify_Chinese
--enable-default-err-languages=Simplify_Chinese
上面两个选项告诉Squid编入并使用简体中文错误信息。
squid支持定制错误消息,错误消息可以用多种语言报告。该选项指定复制到安装目录($prefix/share/errors)的语言。假如你不使用该选项,所有可用语言被安装。想知道何种语言可用,请见源代码包里errors目录下的目录列表。
五,调整内核

Squid在高负载下,需要大量的内核资源。特别的,你需要给你的系统配置比正常情况更高的文件描述符和缓存。文件描述符的限制通常很恼人。你最好在开始编译squid之前来增加这些限制的大小。

因为这点,你可能为了避免重建内核的麻烦,而倾向于使用预编译的二进制版本。不幸的是,不管如何你必须重建一个新内核。squid和内核通过数据结构来交换信息,数据结构的大小不能超过设置的文件描述符的限制。squid在运行时检查这些设置,并且使用最安全的(最小的)值。这样,即使预编译的二进制版本有比你的内核更高的文件描述符,但还是以你系统内核的实际数值为主。

为了改编一些参数,你需要重建新内核。这个过程在不同的操作系统之间不同。假如需要,请参阅Unix系统管理员手册(PrenticeHall出版)或者你的操作系统文档。假如你正使用Linux,可能不必重建内核

六.文件描述符

文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix通常有一个系统级的限制。

因为squid的工作方式,文件描述符的限制可能会极大的影响性能。当squid用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket被关闭,squid不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。

在运行./configure之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2倍。

通常在你的Unixshell中能找到系统的文件描述符限制。所有的Cshell及其类似的shell有内建的limit命令。更新的Bourneshell及其类似的shell有一条叫做ulimit的命令。为了发现你的系统的文件描述符限制,试运行如下命令:

在我们的Linux下运行:

#ulimit-n
1024

很显然1024可能无法满足需求,重新设置

#ulimit-HSn65536
#ulimit-n
65536

需要将ulimit-HSn65536设置在/etc/rc.d/rc.local中,防止重启后失效,花费时间来增加这个限制值的大小。否则,squid在高负载时执行性能将很低。

当然你还可以在每一次系统启动后执行上述echo和ulimit命令,或者至少在squid启动之前。假如你使用某个rc.d脚本来启动squid,那是一个放置这些命令的好地方。
七,临时端口范围

临时端口是TCP/IP栈分配给出去连接的本地端口。换句话说,当squid发起一条连接到另一台服务器,内核给本地socket分配一个端口号。这些本地端口号有特定的范围限制。例如,在FreeBSD上,默认的临时端口范围是1024-5000。

临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些TCP连接在它们被关闭时进入TIME_WAIT状态。当连接进入TIME_WATI状态时,临时端口号不能被重用。

你能使用netstat命令来显示有多少个连接进入这个状态:
%netstat-n|grepTIME_WAIT

ProtoRecv-QSend-QLocalAddressForeignAddress(state)

tcp400192.43.244.42.19583212.67.202.80.80TIME_WAIT

tcp400192.43.244.42.19597202.158.66.190.80TIME_WAIT

tcp400192.43.244.42.19600207.99.19.230.80TIME_WAIT

tcp400192.43.244.42.19601216.131.72.121.80TIME_WAIT

tcp400192.43.244.42.19602209.61.183.115.80TIME_WAIT

tcp400192.43.244.42.3128128.109.131.47.25666TIME_WAIT

tcp400192.43.244.42.3128128.109.131.47.25795TIME_WAIT

tcp400192.43.244.42.3128128.182.72.190.1488TIME_WAIT

tcp400192.43.244.42.3128128.182.72.190.2194TIME_WAIT

注意这个例子中既有客户端连接又有服务器端的连接。客户端连接有3128作为临时端口号,服务器端连接有80作为远程主机的端口号。临时端口号出现在本地地址栏里。在该例子里,它们是19000秒。

在Linux上,简单的写一对数字到下列指定文件:

#echo102440000/proc/sys/net/ipv4/ip_local_port_range

不要忘记将这些命令加到你的系统启动脚本中,以使机器每一次重启后都生效。
八,安装

tar-zxvfsquid-3.0.STABLE13.tar.gz

cdsquid-3.0.STABLE13

./configure--prefix=/usr/local/squid3--enable-dlmalloc--enable-gnuregex--enable-async-io--enable-removal-policies='heap,lru'--enable-delay-pools--disable-snmp--enable-storeio='ufs,aufs,null'--disable-wccp--enable-kill-parent-hack--disable-select--enable-auth=basic--with-aio--disable-ident-lookup--with-filedescriptors=65536--enable-err-languages=Simplify_Chinese--enable-default-err-languages=Simplify_Chinese

make

makeinstall

0 评论:

发表评论