https://github.com/abshkd/dumbcdn/blob/master/nginx-cdn.conf
将该配置放入Nginx目录内。
创建目录/tmp/cache并给予Nginx服务/用户写入许可,并重新加载Nginx服务。如果操作正确的话,服务将正常重启。随后可以在测试各个选项的过程中编辑该文件,并重新加载服务以应用相关更改。
3. 设定配置文件
下面我们将介绍配置中的主要命令行含义
3.1 缓存目录设定
先介绍首行:
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:100m max_size=1g inactive=60m;
该命令设定了Nginx用来存储缓存文件的目录以及其能够创建的子目录级数:
3.2 设定主机名
您可以定义多个主机名,各主机名之间用空格加以分隔。
listen [::]:80;
listen:80;
#edit your actual site name
server_name www.example.com;
上述信息只是为了说明web服务器所采用的主机名,以及在哪些端口上接收。此处,我选择在80端口上接收所有的IPv4 与 IPv6。您可将替换为任意站点,甚至可以替换为搭载站点的本地网络主机,以便供您进行尝试。当然,它也可以是实际的站点!
3.3 Origin 即是王道
location / {
proxy_pass http://origin.example.com;
proxy_set_header Host $host;
proxy_set_header True-Client-IP $remote_addr;
}
毫无意外, Origin主机名可以是一个IP。我可以将LAN IP或我的虚拟机IP作为origin。除了server_name,其他的都可以随便使用 。逻辑上,您只是创建了一个循环。Nginx非常智能,足以指出您所犯的错误。
proxy_pass命令告诉web服务器将匹配location “/“(它是站点的根路径)的所有请求以及其中未在别处定义的任意路径发送至何处。
proxy_set_header命令将其他数据头发送至Forward Host。Host将设定正确的Host数据头,$host是内嵌变量,相当于我们在第1部分放入的server_name。只要远程服务器能够对其响应,则可以一直指定静态名称。
在我们所熟悉的特殊True-Client-IP数据头中,我们增加的第2个数据头用于将实际Client IP发送至origin。
切记,我们实际的origin将隐藏于我们简单的CDN服务器中,因此它不会知道请求来自代理。我们可以添加该数据头,用于测试。
这条规则主要用于说明Nginx代理将所有请求发送至originlinux windows,并不太复杂。
3.4 定义静态对象列表
location ~* .(jpg|png|gif|jpeg|webp|css|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)
$ {...
最后一个程序块为我们第2节中默认的“root”规则增加了一条。它拥有许多我所添加的可行命令。任意文件扩展的情况均匹配该规则,从而执行整个程序块。我将解释主要的命令行,其他命令可以在您的测试中加以研究。
proxy_cache_valid 200 301 7d;
对于 HTTP 状态为200 OK 或 301 永久重定向的响应linux系统web服务器搭建,缓存期为7天。在解释首行配置含义时,曾提及inactive=60m,并对其进行扩充。因此,我们说funny.gif 文件之所以得到缓存是因为符合各项标准。
理想的情况下,web服务器命令浏览器也缓存7天,简单的CDN在存储器内将其保存7天,但条件是每隔60分钟“至少”被访问一次,否则将被清除。它可能在1个小时后被弹出,因此您将继续看到来自它的请求。
proxy_cache_min_uses 2;
在考虑缓存对象时至少需要两次访问。如果某个文件仅被访问一次,则将仅得到origin的服务。
proxy_cachemy_cache;
该命令定义了我们在第1个配置命令行中指明的存储区。请勿与Cache key混淆。
4. 运行
为了进行测试,您只需要做一番“伪装”!一旦重新加载web服务器,即可在系统中使用web浏览器编辑hosts文件,将指向您的简单CDN IP地址,并多次载入浏览器。
检查测试服务器中的/tmp/cache目录,您将在其中发现新的目录与文件。这些都是磁盘缓存文件!
这是一种学习缓存与CDN基础知识的不错方法。
它虽比不上某些智能云分发平台的功能水平,但能够让您访问希望评估的任意站点,并针对尚未公开访问的测试应用查找异常行为。当然linux系统web服务器搭建,您也可以添加一系列选项/目录。Nginx具有高度可编程特性,如果您喜欢脚本处理,它还提供Lua扩展(测试版)。
5. 不足之处
您将开始意识到简单型CDN服务器存在多种限制,不仅局限于该实验室配置,其中我还忽略了一些内容,例如无缓存的cookies。
我编写了Nginx配置,但未在系统内实际运行,您可以通过nginx–test选项加以运行。如果您发现了漏洞,请告诉我,或者在Github上面发送pull 请求。
本文由Akamai 同学提供翻译,为表感谢,特将其二维码放在文末。
本系列其他文章:3月12日北京CDN技术沙龙预告
在运维行业中,如果不知道CDN,都不好意思跟人打招呼,CDN 已经成为一种基础服务。
想知道国内大厂是怎么用CDN的吗?高效运维邀请来自新浪和360等公司的CDN 技术高手,一起带你跟CDN亲密接触!
席位有限,报名从速。更多详情,请点击文末“阅读原文”puppy linux,或者在浏览器中打开,直接报名: