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返回头,返回如下即说明该请求没有被缓存,是通过后端服务器获取的
如果如下,就说明该文件成功被缓存,且该请求是从cdn服务器上获取的
注意:只有当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)