首先:
什么样的页面能够比较好的被缓存服务器缓存呢?如果返回内容的HTTP HEADER中有"Last-Modified"和"Expires"相关声明,比如:
Last-Modified: Wed, 14 May 2003 13:06:17 GMT
Expires: Fri, 16 Jun 2003 13:06:17 GMT
前端缓存服务器在期间会将生成的页面缓存在本地:硬盘或者内存中,直至上述页面过期。
因此,一个可缓存的页面:
页面必须包含Last-Modified 标记
一般纯静态页面本身都会有Last-Modified信息,动态页面需要通过函数强制加上,比如在PHP中:
// always modified now
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
必须有Expires或Cache-Control: max-age标记设置页面的过期时间:
对于静态页面,通过apache的mod_expires根据页面的MIME类型设置缓存周期:比如图片缺省是1个月,HTML页面缺省是2天等。
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 2 day"
ExpiresDefault "now plus 1 day"
对于动态页面,则可以直接通过写入HTTP返回的头信息,比如对于新闻首页index.php可以是20分钟,而对于具体的一条新闻页面可能是1天后过期。比如:在php中加入了1个月后过期:
// Expires one month later
header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24 * 30). " GMT");
查看头文件,wget --save-headers 然后查看下载的文件的文件
1.编译前,调整文件描述符
vi /etc/profile
ulimit -u unlimited
ulimit -n 65535
2.调整端口限制
临时端口是TCP/IP栈分配给出去连接的本地端口。换句话说,当squid发起一条连接到另一台服务器,内核给本地socket分配一个端口号。临时端口号的短缺对非常忙的代理服务器(例如每秒数百个连接)来说,会较大的影响性能。这是因为一些TCP连接在它们被关闭时进入TIME_WAIT状态。当连接进入TIME_WATI状态时,临时端口号不能被重用。如果你没有看到数千个临时端口在TIME_WAIT状态,那也许不必增加这个端口范围
/etc/sysctl.conf
net.ipv4.ip_local_port_range=10000 60000
sysctl -p 生效
3 configure
./configure --prefix=/usr/local/squid \ --enable-async-io=100 \ --disable-delay-pools \ --disable-mem-gen-trace \ --disable-useragent-log \ --enable-kill-parent-hack \ --disable-arp-acl \ --enable-epoll \ --with-filedescriptors=65536 \ --disable-ident-lookups \ --enable-snmp \ --enable-large-cache-files \ --with-large-files \ --enable-dlmalloc \ --enable-removal-policies='heap,lru' \ --enable-delay-pools \ --enable-auth=basic \ --enable-underscore \ --enable-cahce-digests
|
--enable-async-io=180 //1G内存,并且是双核的选180,否则选100以下
打开snmp,这样可以从cacti之类的snmp软件中获取相关squid的参数进行监控
打开大文件支持.允许日志文件超过2G
--enable-async-io[=N_THREADS]
异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。=N_THREADS参数改变squid使用的线程数量。 请注意--enable-async-io是打开其他三个./configure选项的快捷方式,它等同于:
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
该选项导致编译过程链接到你系统中的P线程库。aufs存储模块是squid中唯一需要使用线程的部分。通常来说,如果你使用--enable-saync-io选项,那么不必再单独指定该选项,因为它被自动激活了。
make
make install
4、配置
(此处的配置为配置反向代理,正向代理见下面另一段配置)
cache_effective_user nobody cache_effective_group nobody
visible_hostname 192.168.7.192 http_port 192.168.7.192:80 accel vhost vport #xx.xx.xx.xx为这台服务器的IP地址,单ip地址可以直接写80
cache_mem 80 MB #额外使用内存量,一般为实际内存的1/3 cache_swap_low 90 cache_swap_high 95
cache_dir ufs //cache1 10000 16 256 #10G的缓存。
#定义一个源服务器,将节点设为no-query以及originserver说明这些节点是实际服务器 cache_peer bbs.cloudfront.net parent 80 0 no-query originserver name=bbs cache_peer oa.cloudfront.net parent 80 0 no-query originserver name=oa #设定不同域名转发到不同的cache_peer上,如果没有这项.不同域名的域名可能被分发到同一台服务器上 cache_peer_domain bbs bbs.web.com cache_peer_domain oa oa.web.com
http_access allow all
emulate_httpd_log on #仿照apache日志格式 logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st"%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh pid_filename /usr/local/squid/var/logs/squid.pid cache_log /usr/local/squid/var/logs/cache.log access_log /usr/local/squid/var/logs/access.log combined
#不对符合QueryString1的ACL内容进行缓冲 acl QueryString1 url_regex \.php? no_cache deny QueryString1
maximum_object_size 320010 KB maximum_object_size_in_memory 4096 KB #调大到4MB,让其可以缓存更大的文件,而不是默认的8KB
dns_nameservers 127.0.0.1 202.106.0.20
shutdown_lifetime 3 seconds #定义squid关闭前处理外面请求的时间
cache_mgr xiajc@wamo.com
httpd_suppress_version_string off #关闭版本信息
|
正向代理的配置
cache_effective_user nobody cache_effective_group nobody
visible_hostname 192.168.7.192 http_port 192.168.7.192:80 vhost vport #xx.xx.xx.xx为这台服务器的IP地址,单ip地址可以直接写80
cache_mem 80 MB #额外使用内存量,一般为实际内存的1/3 cache_swap_low 90 cache_swap_high 95
cache_dir ufs //cache1 10000 16 256 #10G的缓存。
http_access allow all
always_direct allow all
emulate_httpd_log on #仿照apache日志格式 logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st"%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh pid_filename /usr/local/squid/var/logs/squid.pid cache_log /usr/local/squid/var/logs/cache.log access_log /usr/local/squid/var/logs/access.log combined
#不对符合QueryString1的ACL内容进行缓冲 acl QueryString1 url_regex \.php? no_cache deny QueryString1
maximum_object_size 320010 KB maximum_object_size_in_memory 4096 KB #调大到4MB,让其可以缓存更大的文件,而不是默认的8KB
dns_nameservers 127.0.0.1 202.106.0.20
shutdown_lifetime 3 seconds #定义squid关闭前处理外面请求的时间
cache_mgr xiajc@wamo.com
httpd_suppress_version_string off #关闭版本信息
|
squid配置完成!
5、建立缓存和日志目录,并改变权限使squid能写入
mkdir /cache1
mkdir /var/log/squid
chown -R nobody:nobody /cache1
chmod 766 /cache1
chown -R nobody:nobody /var/log/squid
touch /usr/local/squid/var/logs/store.log
chown nobody.nobody store.log
可以通过在squid.conf中添加cache_store_log none关闭该log
6、初始化
/usr/local/squid/sbin/squid -z -d 1 #-d 1 debug 1级别
关于
2009/03/17 10:07:43| WARNING: '0.0.0.0/0.0.0.0' is a subnetwork of '0.0.0.0/0.0.0.0'
2009/03/17 10:07:43| WARNING: because of this '0.0.0.0/0.0.0.0' is ignored to keep splay tree searching predictable
2009/03/17 10:07:43| WARNING: You should probably remove '0.0.0.0/0.0.0.0' from the ACL named 'all'
是否在squid里添加了acl all src 0.0.0.0/0.0.0.0
这个在3.0以上版本是不需要了
默认3.0中就已经把all定义了,所以只需要后面使用就行了
7、查看运行状态
拷贝/usr/local/squid/libexec/cachemgr.cgi到apache下,通过web访问
或者,使用命令行工具
[root@real2 squid]# ./bin/squidclient -h 192.168.7.192 -p 80 mgr:info
使用下面的命令查看更多参数:
[root@real2 squid]# ./bin/squidclient -h 192.168.7.192 -p 80 mgr:menu
8、最安全的停止squid的方法是使用squid -k shutdown命令
%squid -k shutdown
该命令发送TERM信号到运行中的squid进程。在接受到TERM信号后,squid关闭进来的套接字以拒收新请求。然后它等待一段时间,用以完成外出请求。默认时间是30秒,你可以在shutdown_lifetime指令里更改它。
9、关于store.log里的RELEASE
RELEASE在Squid从cache里删除目标,或首先就决定响应不会存储。
这可能是因为某个object在之前已经被cache了,再次访问时不会在cache,可以查看access.log查看是否命中
access.log里常见的:
TCP_IMS_HIT:NONE
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
NONE
这指明Squid对本次请求,不会与任何其他服务器(邻居或原始服务器)通信。它通常与cache命中、拒绝请求、cache管理请求、错误、和所有的ICP查询这些类型联合出现。
阅读(1874) | 评论(0) | 转发(0) |