前段时间,好几次,看到自己的网站不翻墙连不上了,但是别的网站却可以。而且,看到连接别人网站加载的资源时,不同区域加载的数据也来自于不同的ip,顿时感觉好牛逼。那他们怎么做到的?于是乎,经过搜索之后才知道,是别人用了平台的CDN服务(当然有的大公司可以自己搭建)。之后,我通过使用亚马逊的Cloudfront也实现了相似的效果,并将实践中遇到的问题总结下。
如何使用Cloudfront,可以参考官方文档CloudFront 入门指南。我实现的方式是在Cloudfront指定web源,并且设置CNAME,最后在域名解析时候相对应设置。
在配置过程中,遇到下面几个问题:
1、web资源加载不会缓存到浏览器中
解决的办法就是在源服务器
的Nginx配置Cache-Control
,如下:
# 统一的配置
add_header Cache-Control max-age=259200;
# 针对html配置为不缓存
location ~* ^.+\.(html|htm)$ {
add_header Cache-Control no-store;
}
2、加载的JS、CSS资源不压缩
解决办法:nginx需要添加gzip_proxied any; 才会生效,具体配置如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/css text/xml image/gif image/jpeg image/png application/javascript image/x-ms-bmp application/pdf text/plain application/json application/xhtml+xml;
gzip_proxied any;
3、https通信中证书的问题
刚开始,我是用自己的证书进行HTTPS配置,然后将证书也上传到亚马逊后台,但是配置之后发现不能用。之后,在仔细理解HTTPS的逻辑和Cloudfront之后,发现其实配置特别简单,需要列举有两点:
- 指定源服务器,源服务器可以指定HTTP也可以指定HTTPS,Cloudfront的边缘节点从源服务器获取数据的过程,和我们自己用浏览器从源服务器获取数据一样,边缘节点是客户端,源服务器是服务器。所以,我们源服务器是HTTPS、HTTP都行。
- 使用亚马逊的HTTPS服务创建证书,之后我们在创建Cloudfront的时候,可以设置这个证书。此时这个证书的作用是用户从边缘节点获取数据使用的,此时用户的浏览器是客户端,边缘节点是服务器,此SSL证书就是保证它们之间通信的安全性,与源服务器没有任何关系。
网友评论