sanae

Squid搭建CDN
0x01 前言国内支持ssl的cdn有哪几家来着......好像除了upyun以外没有了吧,tx云cdn的ssl又...
扫描右侧二维码阅读全文
17
2016/02

Squid搭建CDN

0x01 前言

国内支持ssl的cdn有哪几家来着......好像除了upyun以外没有了吧,tx云cdn的ssl又是内测,不公开提供,跟没有有什么区别。本文将介绍自行搭建cdn服务器并支持ssl的方法。


0x02 准备

为了自建cdn,需要以下东西:

1.后端服务器

2.cdn服务器(1台其实都行,不过那更像是反代)

3.域名ssl证书(如果需要支持ssl)


0x03 开始

本文将以windows为例,linux下除了安装过程不同以外其他大同小异。

首先获取squid for windows(http://squid.acmeconsulting.it/),找到合适的版本进行下载(注意:需要支持ssl的话请下载带ssl support的版本)

下载来的是绿色版,直接解压到C盘根目录即可(因为他就是这么编译的,不解压到C盘根目录的话运行会出错),解压完成后打开里面的etc文件夹,将配置文件后面的.default去掉,然后打开squid.conf,删掉里面所有内容,然后如下编辑(记得替换对应的位置并删掉注释):

#本地绑定的IP端口 
http_port 本机ip:80 vhost 
visible_hostname 本机标识名
cache_dir ufs 缓存目录(请使用反斜线/而不是斜线\) 1024(缓存文件夹大小,单位MB) 16(L1,意思见附录) 256(L2,意思见附录) 
cache_mem 256 MB #这是最大使用多大的内存进行缓存 

https_port 443 cert=d:/cert/skk.cer key=d:/cert/skk.key vhost #如果需要支持https,这里需要指定证书地址,cert为证书,key为私钥

#接下来就是设定后端服务器参数了,第一个为加速http站点的设置,第二个为加速https站点的设置,parent后面的数字即为远程服务器的访问端口,name为名称标识符,后面要统一
cache_peer 2.2.2.2 parent 81 0 no-query originserver weight=1 name=lolicm
cache_peer 1.1.1.1 parent 443 0 no-query originserver login=PASS ssl sslflags=DONT_VERIFY_PEER name=blog
#这里绑定域名,名称标识符要和上面的统一 域名之间用空格分开,如需要绑定泛域名则绑定 .domail.com 就行
cache_peer_domain lolicm loli.cm www.loli.cm
cache_peer_domain blog skk.io www.skk.io

#这里是访问控制,标识符要和上面的统一,allow all即为允许所有人的访问
acl all src 0.0.0.0/0.0.0.0 
http_access allow all
cache_peer_access lolicm allow all
cache_peer_access blog allow all
tcp_recv_bufsize 65535 bytes 
#这里是缓存规则,squid将会按照这个标准去决定是否缓存,如无特殊需要可以直接采用如下规则
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i \.(gif|png|jpg|bmp|jpeg|ico)$ 10080 90% 43200 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 reload-into-ims override-expire override-lastmod ignore-reload ignore-no-cache
refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 reload-into-ims override-expire override-lastmod ignore-reload ignore-no-cache
refresh_pattern -i \.(bin|pdf|rtf|Z|gz|bz2|bz|tgz|cdf|tr|man|zip|cpio|gtar|rpm|shar|tar|ustar|mp2|mpga|aif|aiff|aifc|wav|ief|jpeg|jpe|tiff|tif|ras|txt|mpeg|mpg|mpe|mov|doc|xls|ppt|cab||kar|mid|midi|ra|ram|rm|sgml|sgm|so|spl|vcd|vrml|wbmp|wbxml|wmlc|wmlsc|wmls|xht|xhtml|xml)$ 1440 90% 10080 reload-into-ims override-expire override-lastmod ignore-reload ignore-no-cache
refresh_pattern -i \.index.(html|htm)$ 0 40% 10080  reload-into-ims
refresh_pattern -i \.(htm|html|txt|js|xml|css)$ 0 66% 14400 reload-into-ims stale-while-revalidate=60
refresh_pattern -i . 0 10% 0 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private
#这是管理联系邮箱,将会显示在出错页面中
cache_mgr admin@cache.com
icp_port 0

编辑完配置文件之后就要开始创建缓存目录了,打开cmd命令行,切到squid文件夹中的sbin目录,执行如下命令

squid -z

如果配置文件有错这时就会爆出来,如果显示临时文件创建成果说明配置文件没有问题。

然后通过如下命令来创建系统服务并启动

squid -i
net start squid

如果服务正常启动了,就可以将域名解析到cdn服务器上并打开看看效果了。看http返回头,返回如下即说明该请求没有被缓存,是通过后端服务器获取的

blob.png

如果如下,就说明该文件成功被缓存,且该请求是从cdn服务器上获取的

blob.png

注意:只有当X-Cache为HIT时才说明被成功缓存,如果只有X-Cache-Lookup为HIT的话说明这个文件并没有被缓存。

到这一步,cdn服务器就搭建完成了,如果要搭建更大规模的都可以如法炮制,最后去dns上设定分线解析即可。


0x03 附录

一个清空squid缓存的小脚本,会清空所有squid缓存,保存为一个bat文件即可

@echo off
net stop squid
rd/s/q d:\cache(替换为自己的缓存目录)
cd c:\squid\sbin
squid -z
net start squid

关于上文中的L1,L2的解释:

参数:L1和L2

对ufs,aufs,和diskd机制,squid在cache目录下创建二级目录树。L1和L2参数指定了第一级和第二级目录的数量。默认的是16和256。图7-1显示文件系统结构。


Figure 7-1. 基于ufs存储机制的cache目录结构

(略图)

(这段转自http://zyan.cc/book/squid/chap07.html)


最后修改:2016 年 02 月 17 日 01 : 36 PM

发表评论