随着网站访问人数越来越多,对体验的要求也越来越高,网站承受的并发和压力也越来越大,所以需要对网站和架构进行优化,优化的策略有很大,系统内核、程序、配置均衡、加入缓存等,使用 Squid 对架构进行缓存优化。
Squid cache(简称为 Squid)是一个流行的自由软件,它符合 GNU通用公共许可证。Squid 作为网页服务器的前置 cache 服务器,可以代理用户向 web 服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid 主要设计用于在 Linux 一类系统运行。
简单的来说就是:用户请求 www 网站,经过 squid,squid 检查本地硬盘目录有没有这个文件的缓存;如果没有,squid 则去后端真实web 服务器获取该页面,返回给用户,同时在自己本地缓存一份,如果另外一个用户再访问同样请求页面时,squid 直接从本地返回。
squid 有 ufs, aufs, coss, diskd, null 五种存储机制,其中 ufs, aufs,
diskd 都是在文件系统上面保存很多小文件, coss 是 squid 自己实
现了一个简单的文件系统,可以使用一个大文件或者一个磁盘设备来
存储。null 则是给不想要磁盘缓存的情况准备的,coss 看起来好像很不错, 但是以前试验并不足够稳定,因此并不推荐使用。
对于一些老系统,使用 aufs 或者 diskd 是比较好的选择,如果系
统的线程库比较好(如 Linux,Solaris),那么使用 aufs。
正式安装 squid
安装 squid 也非常简单,可以用源码安装,也可以使用 rpm、yum 安
装,这里使用 yum 安装,根据实际经验使用,squid 2.6 系列的 squid
比较稳定,可以考虑采用。
安装命令:yum install -y squid
创建 squid.conf 配置文件,内容如下:
http_port 80 accel vhost vport
cache_peer 192.168.149.130 parent 80 0 originserver name=wugk1
cache_peer 192.168.149.131 parent 80 0 originserver name=wugk2
cache_peer_domain wugk1 www.wugk1.com
cache_peer_domain wugk2 www.wugk2.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/32acl 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 2014-03-25
cache_dir aufs /data/cache1 10240 16 256
cache_mem 4000 MBmaximum_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.149.128 parent 80 0 originserver name=wugk1
cache_peer 192.168.149.129 parent 80 0 originserver name=wugk2
设置别名所对应的域名,如果 cache_peer 中使用域名而不是 IP 的话;
那么 cache_peer_domain 中一定要用相同的域名,否则无法访问。cache_peer_domain wugk1 www.wugk1.com
cache_peer_domain wugk2 www.wugk2.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 managerhttp_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
设置缓存文件夹的路径和参数,缓存机制为 aufs,10240 表示 10G,
目录下面分为 16 级,每级有 256 个目录
cache_dir aufs /data/cache1 10240 16 256
设置缓存内存大小,最大内存为 4g
cache_mem 4000 MB
设置硬盘中可缓存的最大文件大小
maximum_object_size 8 MB
设置内存中可缓存的最大文件大小
maximum_object_size_in_memory 256 KB
hierarchy_stoplist cgi-bin ?#当 squid 突然挂掉的时候,或者突然出现什么故障的时候,将 squid
在内存中的资料写到硬盘中
coredump_dir /var/spool/squid
<最小时间> <百分比> <最大时间>
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