squid 学习笔记

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 [email protected]

==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:

时间: 2024-10-07 23:52:45

squid 学习笔记的相关文章

Varnish 学习笔记总结

声明:文中内容来自以下四个部分的学习笔记总结: 1.马哥教育马永亮老师讲授的varnish课程 2.高俊峰先生写的书籍<高性能Linux服务器构建实战>中的varnish章节 3.陈明乾先生的51cto博客:http://freeloda.blog.51cto.com/2033581/1297414 4.互联网文档. 特此向以上先贤致敬!! 内容概括: 一 varnish 简要概括 Varnish是一款轻量级的Cache和反向代理软件. 官方网站:https://www.varnish-cac

LVS的持久连接和awk/sed/grep的学习笔记

一.LVS持久连接的模式 1.PPC(persistent port connection) ipvsadm -A|E 192.168.10.1:80 -p 600 定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务 2.PCC(persistent client connection) ipvsadm -A|E 192.168.10.1:0 -p 600 定义VIP为192.

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

bootstrap 新手学习笔记 代码整理

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bootstrap 实例 - 滚动监听(Scrollspy)插件方法</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/jqu

Symfony2学习笔记之HTTP Cache

富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请求,每个请求将会得到很快的回复,而不会对你的服务器造成压力.但是随着你站点的成长,负载将成为一个严重的问题.对每个请求处理应该只被正常执行一次.这就是缓存真正要达成的目标. 站在巨人肩膀上的缓存:提高一个应用程序执行效率的最有效方法是缓存一个页面的所有输出然后让后续的请求绕开整个应用程序.当然,这对

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开