Squid学习笔记

1、安装前的配置

编译安装之前需要校正的参数主要包括File Descriptor和Mbuf Clusters。

1、File Descriptor

查看文件描述符的限制数目:

ulimit –n

调整文件描述符的数目需要3步:

step 1,编辑系统头文件/usr/include/bits/types.h

define __FD_SIZIEFD 8192

step 2,调整内核的FD限制数目

echo 8192 > /proc/sys/fs/file-max

step 3,修改当前shell环境的FD限制数目

ulimit –Hn 8192

2、Mbuf Clusters

3、调整临时端口的范围

Squid与Client连接的Local Port默认值为3128,与Server连接的Remote Port默认值为80。当Squid与源服务器建立连接时,系统会给本地socket分配一个端口号,这些端口号有特定的范围限制。

echo “1024 40000” > /proc/sys/net/ipv4/ip_local_port_range

2、./configure脚本的选项

 
configure脚本的最终任务是创造Makefiles和其他文件;在有些情况下可能需要重新运行configure脚本,例如调整了内核参数,此时必须再次运行./configure以让新的设置生效。在使用make命令重新编译前,需要重运行configure脚本,这通常有两种方法:一是使用如下命令:config.status --recheck;二是使用命令touch config.status,它更新了该文件的时间戳。注意,如果要增加或删除./configure选项,则必须重新敲入完整的命令行。
 
configure的常用选项:

--prefix=PREFIX:Squid的安装目录,缺省值为/usr/local;
--localstatedir=DIR:var目录的安装位置,缺省值为$prefix/var;
--sysconfdir=DIR:etc目录的安装位置,缺省值为$prefix/etc;
--enable-dlmalloc[=LIB]:将Squid源代码包中的dlmalloc包编译和链接进来;
--enable-gnuregex:如有必要,激活使用GNU正则表达式;
--enable-carp:Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluster;
--enable-async-io[=N_THREADS]:异步I/O可以用来提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作,N_THREADS参数改变Squid使用的线程数量。

--enable-async-io选项等同于如下三个选项:
--with-pthreads:在编译过程中链接到系统的P线程库,aufs存储模块是Squid中唯一需要使用线程的部分。
--with-aufs-threads=N_THREADS:指定aufs存储机制使用的线程数量。Squid会根据cache目录的数量,自动计算需要使用多少线程。
--enable-storeio=ufs,aufs,diskd, coss, null:告诉Squid编译时使用哪个存储模块,源码中/src/fs下面有所有可用的存储模块。ufs模块是默认的,它也是最稳定的,但缺点是性能比较有限。

--enable-removal-policies=heap,lru:排除策略是Squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。LRU(least recently used)为默认值,它使用双链表结构,GDS(greed dual size)和LFU(least frequently used)使用heap结构,注意,这种数据结构的实现并不是惟一的。
--enable-icmp:利用ICMP消息来确定回环时间(round-trip time),这类似于ping程序;
--enable-delay-pools:延时池,用来限制带宽。该池由大量的客户端IP地址组成,当来自这些客户端的请求发生cache miss时,它们的响应将被人为的延迟。
--enable-usreagent-log:记录来自客户端请求消息中user-agent的HTTP消息头;
--enable-referer-log:记录来自客户端请求消息中referer的HTTP消息头;
--disable-wccp:Web cache协调协议(WCCP),用以拦截并分发HTTP请求到一个或多个caches。WCCP协议默认是激活的,该选项可用阻止编译WCCP代码。
--enable-snmp:在编译过程中编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库;
--enable-cachemgr -hostname[=hostname]:cachemgr是一个用来对Squid进行查询管理的CGI程序,hostname默认值为空。
--enable-arp-acl:支持ARP或者以太地址、访问控制列表;
--enable-htcp:HTCP是超文本缓存协议,一种类似于ICP的内部缓存协议;
--enable-ssl:允许Squid终止SSL/TLS连接,仅对代理模式的加速请求有效;
--with-openssl[=DIR]:告诉Squid到哪里找OpenSSL库文件和头文件;
--enable-cache-digests:Cache摘要是ICP的另一个可用的替代;

--enable-err-languages="lang1 lang2...":错误消息需要安装的语言,相应的语言文件将复制到$prefix/share/errors中。如果不指定该选项,源包中所有可用的语言都会被安装。

--enable-default-err-language=lang:错误消息采用的默认语言,英语是默认值。

--with-coss-membuf-size=N:该选项设置coss缓存目录的内存缓冲大小,默认值是1MB。循环目标存储系统(Cyclic Object Storage System, coss)是Squid的一种仍处于试验性的存储机制。
--enable-poll:强制使用poll()函数;
--desable-poll:不使用poll()函数;
--disable-http-violations:Squid默认是允许存在违反HTTP规范的配置,该选项可以完全禁止违背HTTP协议规范的代码。
--enable-ipf-transparent:使用IP过滤器(filter)来辅助拦截缓存。
--enable-pf-transparent:在那些使用PF包过滤器的操作系统上使用HTTP拦截,PF是标准的数据包过滤器(packet filter)。
--enable-linux-netfilter:Netfilter是PF的名字,如果要在linux 2.4或以后的版本中使用HTTP拦截功能,那么激活该选项。
--disable-ident-lookups:ident是一个简单的协议,它允许服务器查找来自客户端某条特定TCP连接的用户名。
--disable-internal-dns:Squid源码中包含了DNS两种不同的实现,一个是内置的查找(采用Squid自身对DNS的实现),一个是外部查找(使用C库gethostbyname()和gethostbyaddr()函数),默认使用前者。该选项将激活外部查找,并禁止内置的查找。
--enable-truncate:truncate()系统调用是unlink()的替代品。unlink完全删除cache文件,而truncate将文件大小设为零。有些人认为这种收回磁盘空间但却留下目录项的方法可用改善性能。
--disable-hostname-checks:默认的,Squid要求URL主机名遵守古老的RFC 1034规范,使用该选项可以移除这种限制。
--enable-underscores:允许主机名里包含下划线,但仍须考虑DNS解析程序可能会禁止主机名里包含下划线。
--enable-auth=basic,digest,ntlm:设置HTTP验证机制;

--enable-basic-auth-helpers=LIST:将helpers/basic_auth目录的一个或多个HTTP Basic验证辅助程序编译进来;
--enable-ntlm-auth-helpers=LIST:将helpers/ntlm_auth目录的一个或多个HTTP NTLM验证辅助程序编译进来;

--enable-ntlm-fail-open:允许在有错误时访问NTLM验证模块。

--enable-digest-auth-modules=LIST:将helpers/digest_auth目录的一个或多个HTTP Digest验证辅助程序编译进来;
--enable-external-acl-helpers=LIST:编译一个或多个扩展ACL辅助程序;
--disable-unlinked:外部辅助进程,它对cache文件执行unlink()或truncate()系统调用;我们认为通过在外部进程里执行文件删除工作,能给Squid带来明显的性能提升;
--enable-stacktrace:如果Squid崩溃,数据追踪信息被写到cache.log文件;
--enable-x-accelerator-vary:在Squid被配置成代理时使用。它建议Squid在响应请求时,从后台原始服务器中寻找X-Accelerator-Vary头。

3、Squid的目录结构

libexec:辅助程序,通常由其它程序启动;

libexec/unlinked:从cache目录里删除文件;文件删除是Squid一个性能瓶颈,通过外部进程执行删除操作可以提升性能。

libexec/cachemgr.cgi:Squid管理功能的CGI接口,需要拷贝到WEB服务器的cgi-bin目录;

libexec/diskd:如果指定了--enable-storeio=diskd时,该文件才可见;

libexec/pinger:如果指定了--enable-icmp,该文件才可见;

sbin:仅root可用的程序;

sbin/squid:squid的主程序;

bin:所有用户都可用的程序;

bin/RunCache:启动squid的脚本;

bin/RunAccel:与RunCache几乎一致,但增加另一个命令行参数,告诉squid在哪里侦听HTTP请求。

bin/squidclient:用来测试Squid的HTTP客户端程序;例如:squidclient -m GET http://www.baidu.com > tmp.html

etc:配置文件;

etc/squid.conf:主配置文件;

etc/squid.conf.default:默认配置文件;

etc/mime.conf:告诉Squid对从FTP和Gopher服务器获取的数据使用何种MIME类型;

etc/mime.conf.default:默认mime文件;

share:通常包含只读数据文件;

share/mib.txt:SNMP管理管理信息基础(MIB)文件,SNMP客户端软件(如snmpget和MRTG)需要该文件;

share/icons:存放图标;

share/errors:错误消息模板;

var:包含了不是很重要的和经常变化的文件,这些文件也无需备份;

var/logs:日志文件;

var/cache:缓存目录;

4、Squid的命令行选项

运行$prefix/squid/sbin/squid主程序时,可以指定一些选项,例如:

-h:查看帮助信息。
-v:查看版本信息。
-a port:覆盖squid.conf的http_port值(只影响第一个)。
-u port:覆盖squid.conf的icp_port值。
-d level:将调试消息写入stderr中,level指定需要写入stderr中的消息的最高级别,它遵循debug_options指令的设置。

-s:将cache.log消息记录系统日志/etc/syslog;仅仅在debug级别0和1的消息会被转发,级别0的消息以syslog级别LOG_WARNING记录,级别1的消息以syslog级别LOG_NOTICE记录。所有消息使用LOCAL4的syslog设备。
-f file:指定一个可选的配置文件。
-z:初始化cache和swap目录,首次运行Squid时或新增了一个cache目录时都必须使用该选项。

-N:让Squid在前台终端运行,此时警告/错误消息将直接打印在屏幕上(stderr);

-D:启动squid时不进行DNS初始化测试;

-X:进入完整调试模式,即debug_options ALL 9;

-k function:function可以是reconfigure, rotate, shutdown, interrupt, kill, debug, check, parse等。其中reconfigure可以让正在运行的Squid程序重新加载配置文件;rotate让日志文件周期性滚动存储;shutdown发送信号给Squid关闭进程;interrupt立即关闭Squid;kill发送强行关闭KILL信号给Squid(最终手段);debug将Squid转为完整调试模式;check检查Squid进程的状态;parse解析squid.conf文件,检查配置是否正确。

例如:

squid -k debug; sleep 5; squid -k debug //获得5秒的调试日志信息

5、squid.conf的常用配置指令

==网络参数配置==

http_port:Squid监听客户端HTTP请求的端口号,默认值为3128;

https_port:Squid监听客户端HTTPS请求的端口号,默认值443。

==日志和cache目录==

cache_dir:cache_dir scheme directory size L1 L2,设置cache目录的参数,如存储机制(默认值为ufs)和存放目录(默认值为$prefix/var/cache)等。

logformat:按照需要指定日志在日志文件存储的格式;

access_log:指定access.log的存放目录,默认值为$prefix/var/logs。access.log主要记录客户端请求,如果不需要记录,可以定义access_log /dev/null。

cache_log:指定cache.log的存放目录,默认值为$prefix/var/logs。cache.log主要记录squid的调试消息等信息。

cache_store_log:指定store.log的存放目录,默认值为$prefix/var/logs。stroe.log记录每一个进出cache的对象,如果不需要记录,可以定义cache_store_log none。

debug_options:定义了squid功能模块的日志级别,一般使用默认值debug_options ALL 1;

==配置缓存大小的选项==

cache_mem:用于存放 In-Transit 对象(正在请求)、 Hot 对象(请求成功)和 Negative-Cached 对象(请求失败),默认值是8M;

maximum_object_size_in_memory:超过这个值的对象不会缓存在内存中,默认值是8KB;

memory_replacement_policy:当内存cahce空间不足时,进行对象替换的策略,lru是默认值;

cache_replacement_policy:磁盘缓存替换策略,包括lru/gdsf/lfuda;lru是默认值;

minimum_object_size:低于这个值的对象不能被缓冲,默认值是0;

maximum_object_size:超过这个值的对象不能被缓冲,可以根据响应消息中的content-length头来判断对象大小;如果响应中没有content-length头,则先写入磁盘,再检查对象大小,默认值是4096KB。

cache_swap_low:当cache目录的使用率(百分比)超过该值时,会开始删除旧对象以保证使用率不会超过该值;所以,当squid运行稳定后,cache目录的使用率比较接近该值。默认值是90;

cache_swap_high:默认值是95;

==调整缓存选项==

refresh_pattern:refresh_pattern -i regexp min percent max,间接控制磁盘缓冲,在cache命中率和确保数据的最新这两个性能之间需要折衷。

quick_abort_min:如果客户端中止请求,而资源的剩余内容又小于16KB时,cache默认会继续完成下载,quick_abort_min默认值为16KB;

quick_abort_max:如果客户端中止请求,而资源的剩余内容又大于16KB时,cache默认会取消下载,quick_abort_max默认值为16KB;

read_ahead_gap:发送到客户端预取缓冲区的大小,默认值是17KB;

negative_ttl:定义了错误页面(如“404 NOT FOUND”)的 Negative-Cached 缓存时间(time_to_live);

positive_dns_ttl:DNS查询成功的生存时间,默认6小时;

negative_dns_ttl:对失败的DNS查询进行negative caching对象生存时间。;

range_offset_limit:

request_header_max_size:指定请求的HTTP头的最大大小;

request_body_max_size:指定HTTP请求的body部分的最大值;

collapsed_forwarding:当有多个相同的URI回源时,合并成一个请求处理。

==访问控制==

acl:定义访问控制列表(access control list),格式:acl aclname sr/dest ip/mask。

http_access:过滤client请求;格式:http_access allow/deny aclname。

http_reply_access:过滤Server回复;

icp_access:icp(Internet Cache Protocal)是sibling cache之间的通信协议,该指令用来配置cache与其临近的其他cache之间的访问控制机制。

reply_body_max_size:如果响应消息的消息体超过了该值,就立即删除;

reply_header_max_size:响应消息中得实体不能超过该值;

==超时设置==

request_timeout:请求超时;

persistent_request_timeout:长连接中两个请求的最大间隔时间;

connect_timeout:连接超时;

==其他项==

update_headers:在接收到304 Not Modified响应码时,Squid默认会更新相关头域,update_headers off 可以阻止这种特性;

via:关闭或开启via头,via头用来记录消息在传输过程中经过的中间结点(如gateway、proxy、router等);

header_access:header_access allow/deny header_name,允许或禁止访问某个头域;

header_replace:被header_access拒绝的头域的内容可以使用header_replace进行替换(默认是移除);

deny_info:当请求被访问规过滤掉时,squid会显示一个错误的页面,这个配置项可以定义那个错误的页面。

forwarded_for:Squid是否记录它转发的请求中的hostname或IP地址,默认是打开的。例如X-Forwarded-For: 192.1.2.3;

reload_into_ims:将no-cache或reload请求转变为IMS请求(If-Modified-Since);

cachemgr_passwd:cache管理密码;

cache_effective_user:设置运行Squid的有效账户;

cache_effective_group:设置有效用户组;

visible_hostname:设置主机名;

==管理员参数配置==

cache_mgr:设置管理员邮箱,当Squid发生错误时将发送消息到指定邮箱,如cache_mgr squid@hostname.com

==Cache_peer选项==

cache/no_cache:cache allow/deny alcname,不缓存指定的URL资源;

==外部支持方案的选项==

storeurl_rewrite_program:

storeurl_rewrite_children:

storeurl_rewrite_concurrency:

url_rewrite_program:

url_rewrite_children:

url_rewrite_concurrency:

url_rewrite_host_header:

==Delay pool 参数配置==

store_dir_select_algorithm:为缓存对象选择cache目录的算法,有least-load和round-robin两种,前者是选择负荷最小的目录,后者是轮询所有未满的目录。

minimum_expiry_time:(Expires - Date),最小缓存时间;

vary_ignore_expire:

server_http11:在出口的请求中使用HTTP/1.1协议;

client_persistent_connections:客户端是否支持长连接,默认是打开的;

server_persistent_connections:服务器端是否支持长连接,默认是打开的;

ignore_ims_on_miss:

coredump_dir:

随机推荐

  1. [LeetCode] Self Crossing 自交

    You are given an array x of n positive numbers. You start at point (0,0) and moves x[0] metres to th ...

  2. 【iOS测试】【随笔】帧率FPS评测

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5943263.html   背景 我们的新版App对首页的列 ...

  3. hdu 4607 Park Visit 求树的直径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题目大意:给你n个点,n-1条边,将图连成一棵生成树,问你从任意点为起点,走k(k<=n) ...

  4. 【Python】Django支持事务方式

    代码: with transaction.atomic(): for i in xrange(int(svc_instance_num)): tmp_fileprotect_svc_instance ...

  5. iOS-iPad开发之popoverController使用介绍

    iOS-iPad开发之popoverController使用介绍 iOS开发UI篇-popoverController使用注意 iOS SDK:自定义Popover(弹出窗口) 实现的简单例子: // ...

  6. NHibernate 3.3

    今天试了一下NHibernate 3.3比之前的版本简单,只需要引入两个dll,这两个dll分别是:Iesi.Collections.dll和NHibernate.dll 通过 http://nhfo ...

  7. [读书笔记] 三、搭建基于Spring boot的JavaWeb项目

    一.POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  8. 使用Git过程中经常会遇到的问题

    目录 git pull如何强制覆盖本地文件 Git如何同时删除本地分支和远程分支 Git如何撤销最近一次提交 Git撤销本地的最后一次提交 Git撤销最近一次远程提交 如何修改提交信息和文件 修改本地 ...

  9. 找一个数组的最大和的连续子数组(时间复杂度 O(n))

    设计思想 一开始的思想是求出全部的情况,再分别比较大小,这种方法适用于有限个数组,不适用于输入数组长度和内容的情况. 但也试着做了 int a[]= {-1,2,6,-10}; int size=4; ...

  10. Linux性能优化 第五章 性能工具:特定进程内存

    5.1 Linux内存子系统 在诊断内存性能问题的时候,也许有必要观察应用程序在内存子系统的不同层次上是怎样执行的.在顶层,操作系统决定如何利用交换内存和物理内存.它决定应用程序的哪一块地址空间将被放 ...