首页 Linux正文

Squid 缓存服务器配置

王昊 Linux 2019-12-24 612 0

随着网站访问人数越来越多,对体验的要求也越来越高,网站承受的并发和压力也越来越大,所以需要对网站和架构进行优化,优化的策略有很多,系统内核、程序、配置均衡、加入缓存等

Squid cache(简称为 Squid)

Squid 作为网页服务器的前置 cache 服务器,可以代理用户向 web 服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网

简单的来说就是:用户请求 www 网站,经过 squid,squid 检查本地硬盘目录有没有这个文件的缓存;如果没有,squid 则去后端真实 web 服务器获取该页面,返回给用户,同时在自己本地缓存一份,如果另外一个用户再访问同样请求页面时,squid 直接从本地返回。

squid 有 ufs, aufs, coss, diskd, null 五种存储机制,其中 ufs,aufs,diskd 都是在文件系统上面保存很多小文件, coss 是 squid 自己实现了一个简单的文件系统,可以使用一个大文件或者一个磁盘设备来存储。null 则是给不想要磁盘缓存的情况准备的,coss 看起来好像很不错, 但是性能不够稳定,因此并不推荐使用。

比较好的选择是aufs 或者 diskd,如果系统的线程库比较好(如 Linux,Solaris),那么使用 aufs。

服务端:192.168.17.195
客户端1:192.168.17.198
客户端2:192.168.17.199

服务端配置

cd /usr/local/

wget http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE23.tar.gz

tar zxvf squid-2.6.STABLE23.tar.gz

cd squid-2.6.STABLE23

./configure –enable-storeio=ufs,diskd

make && make install

cp /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bak

vim /usr/local/squid/etc/squid.conf

http_port 80 accel vhost vport 
cache_peer 192.168.17.198 parent 80 0 originserver name=whaoub1 
cache_peer 192.168.17.199 parent 80 0 originserver name=whaoub2
cache_peer_domain whaoub1 www.whaoub1.com 
cache_peer_domain whaoub2 www.whaoub2.com 
visible_hostname localhost 
forwarded_for off 
via off 
cache_vary on 
#acl config 
acl manager proto cache_object 
acl localhost src 127.0.0.1/32 
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network 
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network 
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network 
acl SSL_ports port 443 
acl Safe_ports port 80 8080         # http 
acl Safe_ports port 21          # ftp 
acl Safe_ports port 443         # https 
acl all src 0.0.0.0/0 
acl CONNECT method CONNECT 
http_access allow manager localhost 
http_access deny manager 
http_access deny !Safe_ports 
http_access deny CONNECT !SSL_ports 
http_access allow localnet 
http_access allow localhost 
http_access allow all 
acl PURGE method PURGE 
http_access allow PURGE localhost 
http_access deny PURGE 
#squid config 2019-12-24 
cache_mem 1000 MB 
maximum_object_size 8 MB 
maximum_object_size_in_memory 256 KB 
hierarchy_stoplist cgi-bin ? 
coredump_dir /var/spool/squid 
refresh_pattern ^ftp:           1440    20%     10080 
refresh_pattern ^gopher:        1440    0%      1440 
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0 
refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js) 
1440    50%     2880    ignore-reload 
refresh_pattern .               0       20%     4320

Squid 参数详解

#vhost 和 vport 表示支持虚拟主机和虚拟端口,如果再加上 transparent 表示支持
透明代理 
http_port 80 accel vhost vport 
#cache_peer 表示如果本机缓存中找不到客户端请求的数据,则与后端主机联系,
以 parent 类型进行联系; 
使用 HTTP 协议进行联系,联系端口是 80,orginserver 表示此服务器是源服务器,
name 表示别名。 
cache_peer 192.168.17.198 parent 80 0 originserver name=whaoub1 
cache_peer 192.168.17.199 parent 80 0 originserver name=whaoub2 
#设置别名所对应的域名,如果 cache_peer 中使用域名而不是 IP 的话; 
那么 cache_peer_domain 中一定要用相同的域名,否则无法访问。 
cache_peer_domain whaoub1 www.whaoub1.com 
cache_peer_domain whaoub2 www.whaoub2.com 
#设置缓存服务器名称 
visible_hostname localhost 
forwarded_for off 
via off 
cache_vary on 
#acl config 
acl manager proto cache_object 
acl localhost src 127.0.0.1/32 
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network 
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network 
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network 
acl SSL_ports port 443 
acl Safe_ports port 80 8080         # http 
acl Safe_ports port 21          # ftp 
acl Safe_ports port 443         # https 
acl all src 0.0.0.0/0 
acl CONNECT method CONNECT 
http_access allow manager localhost 
http_access deny manager 
http_access deny !Safe_ports 
http_access deny CONNECT !SSL_ports 
http_access allow localnet 
http_access allow localhost 
##设置访问控制,允许所有客户端访问上面设置的两个网站 
http_access allow all 
#支持 purge 方式清除缓存 
acl PURGE method PURGE 
http_access allow PURGE localhost 
http_access deny PURGE 
#squid config 2014-03-25 
#设置缓存内存大小,最大内存为 4g 
cache_mem 1000 MB 
#设置硬盘中可缓存的最大文件大小 
maximum_object_size 8 MB 
#设置内存中可缓存的最大文件大小 
maximum_object_size_in_memory 256 KB 
hierarchy_stoplist cgi-bin ? 
#当 squid 突然挂掉的时候,或者突然出现什么故障的时候,将 squid 在内存中的
资料写到硬盘中 
coredump_dir /var/spool/squid/var/cache
#<refresh_pattern>  <regex> <最小时间> <百分比> <最大时间> 
#refresh_pattern 用于确定缓存的类型,缓存过期时间,及百分比。 
#如果希望内容缓存 cache 后不删除,直到被主动用 purge 清除,可以加
ignore-reload 选项 
refresh_pattern ^ftp:           1440    20%     10080 
refresh_pattern ^gopher:        1440    0%      1440 
refresh_pattern -i (/cgi-bin/|\?)   0     0%      0 
refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440   50%   2880  
ignore-reload 
refresh_pattern .               0       20%     4320

授权

mkdir /usr/local/squid/var/cache

chown -Rf nobody /usr/local/squid/var/cache/

chown -Rf nobody /usr/local/squid/var/logs/

/usr/local/squid/sbin/squid -z

2019/12/24 05:30:19| Creating Swap Directories

启动squid

/usr/local/squid/sbin/squid

ps -ef |grep squid

root      44112      1  0 05:37 ?        00:00:00 /usr/local/squid/sbin/squid
nobody    44114  44112  0 05:37 ?        00:00:00 (squid)
root      44117  33056  0 05:38 pts/1    00:00:00 grep --color=auto squid

查看端口

yum -y install net-tools

netstat -tnl

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN  

借助上一次实验的环境(LVS+keepalived)来进行测试

先看两台客户机服务器能否访问到discuz论坛

浏览器先验证能否正常访问,若无法访问可检查防火墙设置

http://192.168.17.198/forum.php
http://192.168.17.199/forum.php

然后修改物理机的hosts文件(C:\Windows\System32\drivers\etc\hosts)

增加以下内容

192.168.17.195 www.whaoub1.com www.whaoub2.com

浏览器进行域名测试

http://www.whaoub1.com
http://www.whaoub2.com

能访问到论坛表明正常

如何查看有无缓存呢,一般是通过

http://www.whaoub1.com/forum.php –> F12 –> Network –> search.png(随机一个文件)

若有X-Cache: HIT from localhost表明已有缓存

Squid 常用命令使用:

Squidclient 可以用来清理 squid 缓存,查看 squid 状态等功能。

使用方法:

cd /usr/local/squid/bin/

取得 squid 运行状态信息:

./squidclient -p 80 mgr:info

取得 squid 内存使用情况:

./squidclient -p 80 mgr:mem

取得 squid 已经缓存的列表:

./squidclient -p 80 mgr:objects

取得 squid 的磁盘使用情况:

./squidclient -p 80 mgr:diskd

强制更新某个 URL :

./squidclient -p 80 -m PURGE http://www.whaoub1.com/static/image/common/nv_a.png

查看缓存命中率:

./squidclient -p 80 mgr:info |egrep “(Request Hit Ratios|Byte Hit Ratios)”

查看缓存的URL:

./squidclient -p 80 mgr:objects |grep “GET”

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论