浅谈CDN技术的基本原理与阿里云CDN的使用
如果你有一个小站,经过细心经营,流量慢慢变大,或者你想搞个活动,请求量会比平时多很多。你租的虚拟主机网络可能会被打 爆,导致整个网站打开变慢。想扩大带宽却发现独享带宽很贵,这个时候你可以使用CDN。
如果你有一个店铺,业务慢慢做大,客户遍布全国甚至全球,你时常收到客户的抱怨,你的网站在某个地区打开很慢。那么你可以使 用CDN。
互联网江湖险恶,你经营的网站时常遭到竞争对手的攻击或者其他不明身份人的入侵,仅仅凭借你的几台服务器,无力对抗邪恶势 力,你也没有足够的资金去雇佣安全人员。那么,你也可以使用CDN。
现代的CDN (Content delivery network),俗称内容分发网络,它提供充足的带宽、遍布全国的节点,让你的网站部署到了客户的家门口。此外,现代CDN一般都有提供全套的安全解决 方案,保护你的源站,将危险挡在墙外。
CDN是如何运行的?
一般来说,用户是这样通过CDN来访问网站的:
1. 用户是通过域名来访问网站的,然后各地用户的请求会被调配到当地的CDN节点。
2. CDN节点会从真实的源网站拿到内容,再吐给用户。如果该内容可以缓存,则会根据协议存在CDN一段时间。如果下次有其他用户再来访问CDN,就有可能拿 到缓存的内容,就直接返回了。
现在互联网的攻击一般分为两种:
1. 依靠蛮力的分布式攻击,用海量的“肉鸡”不停的访问你的网站,让你的出口带宽撑满,服务器过载,不能服务。
2. 依靠巧力的渗透攻击,流量可能不大,但是危害性非常高。比如利用网站的漏洞入侵你的数据库,破解你的服务器密码。
CDN是网站的前哨,根据上述攻击类型:
1. 针对蛮力攻击,一般会构建硬件或者软件的防御工具,利用CDN海量的带宽和数据分析能力,将洪水挡在外面。
2. 防御渗透攻击,依靠安全人员充足的经验,利用规则进行入侵检测,建立起应用层的防火墙。
阿里云CDN
CDN的价值就在于遍布全国的节点,强大的带宽吞吐能力。阿里云现在单点最小服务能力是10G,全国超过40余个节点,大部 分省份和运营商均有覆盖,可以帮助客户提高网站的服务体验,灵活处理突发的流量。有充满经验的技术和运营人员,保障过淘宝双11,让客户 的体验达到最佳。
阿里云CDN提供了从4层到7层的安全解决方案,只要接入CDN,就会自动开启4层防DDoS攻击,可防御400G以上的攻 击,另外也可配置选择接入应用层防DDoS和渗透攻击。阿里云有顶尖的安全技术人员日夜监控网站的风险,为客户及时修补漏洞。
云解析负载均衡
在大型的网络应用中,使用多台服务器提供同一个服务。平均分配每台服务器上的压力、将压力分散的方法就叫做负载均衡。 利用云解析来实现服务器流量的负载均衡,其原理就是“给网站访问者分配不同的IP地址”。
例如:有3台服务器,对应3个IP地址,分别是1.1.1.1、2.2.2.2、3.3.3.3,设置的3个A记录如下:
A www default 1.1.1.1 600
A www default 2.2.2.2 600
A www default 3.3.3.3 600
DNS负载均衡的优点是采用简单的轮循负载算法,据解析记录配置的权重轮询3个A记录(默认权重1:1:1),依次返回3个IP地址,
操作流程:
第1步:免费开启云解析,进入到域名控制台
第2步:将您要设置的负载均衡设置多个A记录解析
第3步:点击左侧负载均衡,选中域名,点开启确认即可,并根据自身需求修改权重即可
对HTTPS的支持
阿里云已经在1月20日上线了 HTTPS CDN。
步骤总体而言很简单,输入证书和私钥
修改之后业务类型会变成 HTTPS 安全。
实际上 nginx 配置里的 ssl_certificate 和 ssl_certificate_key 就是 pem 编码的,直接拿来就能用。
如果提示证书格式不对,是因为要求每行64字符,比如我使用的 alphassl 的泛域名证书就有一行超过64字符,输入的时候在 U 前面换一行就行。
关于使用了 CDN 之后的日志问题(访问的就都变成了 CDN 服务器),可以通过修改 nginx 的 log_format 实现:
在 /etc/nginx/nginx.conf 的 http 字段下添加一行 log_format :
log_format ssl '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
' $ssl_protocol/$ssl_cipher '
' $status $body_bytes_sent "$http_referer""$http_user_agent" ';
然后在对应站点的配置下把 Access log 的配置改掉:
access_log /var/log/nginx/blog_access.log ssl;
不能在监听443的 Server 区块里直接定义 log_format,否则会报错 nginx [emerg]:”log_format” directive is not allowed