一名CDN老兵的分享

大家好,我是网宿科技的郭文强。

很高兴在这里和大家分享一些CDN行业的经验,先简单地介绍下我自己~

我是08年加入网宿的,目前担任网宿CDN产品总监,主要负责企业应用加速、网站加速几条线的CDN加速产品。

在CDN架构设计和数据分发领域积累了几年的工作经验,我也算是一个CDN行业里的老兵了。今天我就以一个老兵的身份和大家来分享自己在这个行业的一些经验,欢迎随时拍砖和提问交流:)下面我就正式开始哈。

08年我刚加入网宿的时候,互联网的发展还远不如现在,有很多体验的制约问题,进入网宿后,我们就在着手来解决网络体验糟糕的问题。

当时国内CDN也处于很早期的阶段,一开始我们也遇到很多坑,早期CDN技术是以空间换时间的技术,通过靠近用户端的缓存来换取网络传输时间的减少,只能做静态内容加速。

但2008年的时候,Web2.0已经很普及了,许多个性化的数据是需要跟源站进行交互的,当时国内网络环境不是很好,这些交互数据都要跨越互联网上最遥远的距离(你在电信,我在网通),体验就会特别差。对于这个问题国内CDN厂商都没有比较好的解决办法。

传统动态加速的方案采用双线机房或BGP方式来解决,这样的方式只能在一定程度上缓解跨运营商访问的问题,对于长肥骨干网的传输低效问题没有比较好的解决方法。

再一个,当时路由和传统传输协议也都比较古老,无法适应动态数据的高效传输。我们针对这些问题进行逐个分析,在传输协议、路由算法、动态应用等方面仔细琢磨,在10年5月推出了一个动态加速技术。

这个技术是通过智能路由探测获得最佳访问路径,改造传统TCP协议的拥塞控制、重传算法等技术最终实现整体传输速度的提升,它可以解决动态数据在国内网络传输的问题。当时解决了很多电商网站体验不好的问题,因为电商网站的搜索、放购物车,验证码这些都是动态数据,体验不好,对购买的转换率影响还是挺大的。

QQ截图20160128164116.jpg

这是动态加速的一个产品图。网宿WSA通过在全国CDN各个节点均部署专用的服务器组成WSA加速平台,用户请求通过网宿全球负载均衡中心解析接入网宿WSA加速平台,平台自动进行动静态内容分离加速。静态文件如图片通过智能缓存由WSA边缘节点就近直接响应给用户,动态文件如查询通过网宿DAA动态加速技术实现快速与源站交互获取响应,通过智能动静态分离加速实现全站加速,提升用户访问体验。

12年随着移动互联网的兴起,移动网络它比固网的传输问题更大,我们有一个经验数据,互联网传输的70%时延是出现在移动网络,固网传输只占30%。而且和PC不一样,移动终端更复杂,性能、屏幕大小区别太大。所以对企业来说,移动端又多很多更难搞的问题,比如电商图片需要针对不同终端做多种样式,工作量大、存储管理需求。

所以在这个需求上,我们又开始考虑在动态加速解决方案上,增加移动端的很多个性化需求,帮源站解决终端适配、对移动网络协议针对性的协议优化,根据不同网络制式和终端的网络情况自动适配算法,解决到移动端的传输问题。

到2013年,IPv4地址分配耗尽,又出现新的问题,怎么让网站和用户之间在IPV4与IPV6双向兼容,很多网站需要一个低成本的解决方案。所以我们在用户和网站之间搭建了一个智能转换的平台,源站不需要做任何事情,只要接入这个平台,让IPV4或IPV6的用户都能自由的访问IPV4或IPV6的网站。

所以可以说是,最初的一个动态加速,在适应互联网变化的需求,不断的在思考怎么解决动态数据在网络传输中的各种问题。

动态数据需要和源站进行交互,需要源站的数据库来产生。很多大公司,比如BAT在数据库上投入了大量的资源,对数据库进行优化,来不断的减少数据库计算的时间。

但从我们和客户的实际交流中会发现,有很多银行、证券、家电制造业的传统企业,它是做不到像BAT一样投入很多的资源来去做数据库的优化,所以他们在数据库的计算上遇到的问题就更大。就迫切需要一种办法来解决数据库计算时间过长的问题。

最后我们想到了异步的方式,可以将数据库响应时间对页面加载时间的影响减到零。这个技术,我们叫动态流传输,我们也为这个技术在中国与美国都申请了专利。

除了不断的去改善动态数据的传输速度,另外,保证网站内容的安全也是非常重要的一点。网站内容安全涉及到多个方面,比如盗链、劫持和攻击,针对这些问题,我们利用时间来做时间戳防盗链,利用HTTPDNS来防劫持,通过流量清洗和高防集群来防攻击。

但是对于篡改,CDN只能解决CDN内部和CDN到源站两块,要实现端到端全程的防篡改是比较困难的,所以我们会建议客户通过HTTPS来解决篡改。其实我们从服务客户的经验来看,也发现越来越多的客户开始采用HTTPS协议,来提高网站安全性。

https协议比普通的http协议流量大,而且因为要加密解密,所以传输会更慢一些。早期,很多客户为了保证安全评级,是宁愿牺牲网站访问体验,不给https做CDN加速的。但是发现不做加速,网站用户访问体验很差,这对于很多网站来说是致命的,你安全是保障了,但是用户干脆不用了。那怎么办呢。

2011年,针对这个问题我们就想了一个办法:给客户开发个加密客户端,让客户通过客户端对私钥进行加密,私钥通过加密后上传到网宿CDN节点,加密的密码掌握在客户自己手上,部署过程由客户通过后台自主实现。

同时,这个过程中,为了打消客户的安全顾虑,增强CDN系统本身的安全性,我们申请并且通过了全球最严格的PCI DSS认证。

但是,所谓道高一尺,魔高一丈,Openssl协议在安全运作多年后在2014年爆出发像业界有名“心脏出血”漏洞等事件,我们就在思考,现在的网络发展太快了,而且爆发出来的攻击也越来越多,私钥部署在CDN系统上,尽管他是加密的,但还是会有风险的。

而且也不段有客户从这个角度给我们提更高的需求,所以我们又开始想一个更安全的办法来解决HTTPS的传输问题。怎么可以不拿私钥,又能提供CDN加速给客户,保证网站的访问体验。

于是我们做了一个叫做 “无证书驻留HTTPS加速方案”,简单地说,就是实现了客户不用提供证书给我们,也能够实现HTTPS加速。

这是无证https加速的一个原理图。

QQ截图20160128164158.jpg

它的具体实现是:



1A:用户发起https请求,进行ssl握手,公钥加密客户端生成随机密码后发往CDN节点。



1B:CDN节点与私钥服务器建连,通过加密的方式将客户端发来的公钥加密的随机密码发往源站的私钥服务器,私钥服务器通过私钥解密获得随机密码,然后再将随机密码通过加密返回给CDN节点。

2A:CDN节点和终端用户双方都拥有随机密码,即可以正常通信发送加密数据。



2B:CDN节点回源请求则再与源站真实服务器建立https连接获取网站内容。

这对于很多顾虑将https证书提供给第三方的银行啊,金融支付的企业来说,就可以更放心的来做CDN加速。

最后,想分享一个做CDN的感悟。区别于做别的产品,CDN相对是一件满寂寞的事情,为什么,服务太靠后了,大家感知不到,而且现在很多新的创业公司,新技术、领先、智能硬件各种,都能吸引很多的眼球。CDN不是,它一定是一个跟随性的业务。

一定是等某一个互联网业务起来了,CDN再去为它服务,解决它带来的传输问题,让它能发展好,从这个层面上来说,做CDN不是一件吸引眼球的事情,很寂寞。

即使技术很厉害,也很难被人了解。这两点也是网宿一直在坚持的。也是网宿能做到今天很重要的一点。

好,谢谢大家,我的分享到这里。接下来是互动时间,看看大家有什么问题,可以交流一下~

问答环节:

问:除了https,CDN还有其他手段来对抗运营商劫持和dns劫持么?



答:dns劫持可以采用HTTPDNS的方式来解决,运营商的劫持一般发生在小运营商。



我们统计了下,全国大约有190多家小运营商,在其中的160家中网宿都有节点,保证网宿的客户不受劫持影响,另外三十多家我们通过HTTPDNS来解决。



同时,我们跟全国dns服务管理员维护着比较好的关系,当我们的客户出现DNS被投毒和劫持的时候,我们可以协助解决。



所以,CDN也是一个符合二八定律的行业,花20%的投入就能解决80%的问题,剩下的20%的问题需要花额外80%的投入才能解决。



例如,为了 应对DNS攻击,我们将我们的dns服务能力提升到10亿qps。

虽然我们有大量的加速域名,但正常情况下我们的dns请求数不到20万qps,为了应对攻击我们也投入巨大,愿意为保障客户投入更多的资源和成本。

问:网宿有没有在研究P2P的数据下载加速?类似迅雷星域那种?



答:1、P2P技术我们一直在CDN里头在使用,P2P技术的好处在是针对大文件的传输优化上是非常好的,尤其是像视频类大文件类的传输,我们一直都在视频传输方案、下载的传输方案上都有所使用。但它并不适用于全场景,比如网站加速、图片类。



2、大规模的P2P面临着复杂的管理问题:上行带宽使用过多会造成链路层面的拥塞,对控制能力要求很高。内容管控面临风险。篡改用户内容相对容易。信息安全方面,用户端的抗攻击能力也肯定不如CDN节点。



最后,用户端的网络环境和终端能力都是相对不稳定的,P2P节点服务会受限于家庭端能力和网络环境,而且P2P节点多,对调度能力是非常大的挑战,所以P2P节点相对于CDN节点,它服务的稳定性和调度效率还有待实践考证。

对于企业级客户而言,对服务质量、安全和稳定要求都是很高的,所以P2P的服务模式,目前来看还有待验证。

问:现在的研究和应用情况如何?



答:现在的应用和研究情况,您指的是我们的还是迅雷的?如果是我们的:对于目前我们服务的客户而言,我们认为CDN现有的IDC节点的服务方式是最可靠并且是最稳定安全的,所以我们目前采取的是这种方式。P2P只能作为有限的补充,我们不认为P2P方式能够占据太大的比重。而针对家庭端越来越大的重度应用需求,我们更倾向的做法是社区云的方式,将CDN节点下沉至社区。

问:如果源站在国内,通过用海外cdn节点,能解决海外用户访问体验? 另外一些国际大公司网站,他们是多站点,还是一个源站+cdn?



答:基本上国际大公司网站都是主备源站+CDN的模式,当然也有国际大公司在国内设立中文站+CDN服务

问:最后我们想到了异步的方式,可以将数据库响应时间对页面加载时间的影响减到零。这个技术,我们叫动态流传输。这个是否可以解释一下,具体解决的是哪个场景,加速后效果区别?



答:举个例子,电商的订单页面,源站数据库处理时间是5秒,内容传输10秒,如果不用这个方案,加速后,内容传输时间变为5秒,用了这个方案后,整体时间可压缩到5.1秒。

问:阿里云等公有云的CDN有跟网宿合作吗?



答:像七牛、金山、联想、UCLOUD、腾讯等云厂商跟网宿都有合作。我们通过和这些公有云厂商合作积累了非常多的公有云服务经验,你要不要也来试下。

问:10亿qps是什么解决方案?用服务器累么?



答:首先是提升单机能力,采用Intel DPDK和多队列网卡,我们可以让DNS服务器的万兆网卡跑满,在这基础上再做一些服务器集群,分区DNS等等。

2016 亚太CDN峰会拟邀请单位名单

2016 亚太CDN峰会拟邀请单位名单,包括云服务提供商腾讯云、阿里云、百度云、金山云、迅雷云、七牛云、网易云、亚马逊AWS、乐视云、Ucloud等,专业第三方CDN服务提供商蓝汛、网宿科技、世纪互联、Akamai、Limelight、帝联科技、北京快网等

云服务提供商 腾讯云、阿里云、百度云、金山云、迅雷云、七牛云、网易云、亚马逊AWS、乐视云、Ucloud等
专业第三方CDN服务提供商 蓝汛、网宿科技、世纪互联、Akamai、Limelight、帝联科技、北京快网等
电信运营商 全国各地电信IPTV运营商
通信服务提供商 华为、中兴、烽火等
广电运营商 歌华有线、东方有线、江苏有线、天威视讯、吉视传媒、陕西广电等
OTT视频服务提供商 iCNTV、国广东方、GiTV、东方明珠、华数TV、芒果TV、南方传媒、爱奇艺、优酷土豆等
垂直类排名网站 去哪儿网、新浪微博、多玩游戏网、汽车之家、起点中文网、蚕豆网等
家庭游戏应用平台 中兴九城、完美世界、奇珀市场
当贝市场 沙发管家 爱家TV等
智能家居与物联网平台 QQ物联,阿里智能,海尔智能家庭创新中心,中国电信智能家庭运营中心,紫光物联等
VR/AR产业 爱奇艺、暴风魔镜、腾讯MIG、百度未来商店等
移动应用平台及服务提供商 小沃科技、咪咕视讯、PP助手、360手机助手、腾讯应用宝等

国内外CDN服务提供商大全,含CDN网站地址

国内外CDN厂商列表100强,包括蓝汛、网宿科技、世纪互联、Akamai、Limelight、帝联科技、北京快网、腾讯云、阿里云、百度云、金山云、迅雷云、七牛云、网易云、亚马逊AWS、乐视云、Ucloud等等传统专业CDN也有云CDN服务提供商

CDN序号 国内CDN服务商域名 国内CDN服务商
1 chinanetcenter.com 网宿CDN
2 ChinaCache.com 蓝汛CDN
3 Dnion.com 帝联CDN
4 Fastweb.com.cn 快网CDN
5 Shatacloud.com 沙塔CDN
6 Xycdn.com 网心CDN
7 Fastcache.com.cn 速网CDN
8 72e.net 亿动CDN
9 Qy.com.cn 群英CDN
10 Qcloud.com 腾讯云CDN
11 Yaocdn.com 万根CDN
12 Yscdn.hs.com.cn 华数CDN
13 Wdcdn.com 万德CDN
14 Ofidc.com 奥飞CDN
15 Plcdn.cn 宝腾CDN
16 727idc.com 新世纪CDN
17 Aliyun.com 阿里云CDN
18 Chinaspeeds.com 思必达CDN
19 Cdnbest.com 帮腾CDN
20 Verycdn.com 云端CDN
21 Cdnzz.com 格安CDN
22 Cloud.360.cn 奇虎CDN
23 win-man.com 云漫CDN
24 Ctyun.cn 电信CDN
25 Qiniu.com 七牛CDN
26 Lesucdn.com 乐速云CDN
27 100dns.com 亿讯CDN
28 51cache.com 华云CDN
29 Upyun.com 又拍云CDN
30 Cdnway.com 南天CDN
31 Jiasule.com 创宇知道CDN
32 Baidu.com 百度云CDN
33 Yunfancdn.com 云帆CDN
34 Linkidc.com 零刻数据CDN
35 Zoneidc.com 纵横数据CDN
36 Diycdn.com CDN
37 123cdn.com 思海CDN
38 Cdnplus.com CDN
39 Linkwww.com 指南针联网CDN
40 Yiqikuai.com 一起快CDN
41 Kwww.com 上海快网CDN
42 u1w.cn 优易互联CDN
43 Ebaidu.net 八度CDN
44 Powercdn.com 动力在线CDN
45 Huawei.com 华为CDN
46 Zte.com 中兴CDN
47 Fiberhome.com.cn 烽火CDN
48 Chinacdn.com CDN
49 Dns110.com 博铭CDN
50 Tingyun.com 听云CDN
51 China-cdn.net 炫彩CDN
52 Landui.com 蓝队CDN
53 Enkj.com 亿恩CDN
54 Yjindun.com 云金盾CDN
55 Shimai.cc 世迈CDN
56 Hkcdn.net 好快网CDN
57 Edong.com 欧网CDN
58 92game.net CDN
59 Jiasulo.com 砖石网络CDN
60 Baiyunqianrong.com 思羽CDN
61 Placdn.com 盾网CDN
62 Cnhlj.com 亿林CDN
63 Pow.net.cn 世信互联CDN
64 Iaiyun.com 爱云CDN
65 Appexnetworks.com 华夏创新CDN
66 Zxway.cn 知心伟业CDN
67 Daidc.com 海量CDN
68 Syhhidc.com 恒昊互联CDN
69 Now.cn 时代互联CDN
70 Longcdn.com 神之脉CDN
71 Eccom.com 华讯CDN
72 Henghost.com 恒创CDN
73 Bonree.com 博睿宏远CDN
74 Ucloud.cn 优刻德CDN
75 Uspeed.com.cn 优速CDN
76 Letvcloud.com 乐视云CDN
77 Ruijie.com.cn 锐杰CDN
78 Powerise.tv 创智CDN
79 Oneidc.net 壹互联CDN
80 West.com.cn 西部数码CDN
81 Asdtv.com 未来云CDN
82 H3c.com.cn 华三CDN
83 Temobi.com 融创天下CDN
84 Avit.com.cn 佳创视讯CDN
85 Cloudgate.com 云捷CDN
86 Yovole.com 有孚CDN
87 Viewgood.com 远古CDN
88 sibore.com 视博网媒CDN
89 Ruiboyun.com 云视睿博CDN
90 Hugedata.com 汇吉递特CDN
91 Linktom.com 互联互通CDN
92 999-cdn.com CDN
93 Cstor.cn 云创CDN
94 Idcs.cn 天互CDN
95 Grandcloud.com 盛大云CDN
96 Ksyun.com 金山云CDN
97 Bokecc.com 梦之窗CDN
98 Quklive.com 趣看CDN
99 Cmsoft.10086.cn 中移CDN
100 capitalcloud.net 首云汇金CDN
101 Polyv.net 保利威视CDN
102 Bairuitech.com 佰锐CDN
103 baofengcloud.com 暴风CDN
104 cybercloud.com.cn 视博云CDN
105 xst365.com 星视通CDN
106 Wsview.com 云宇CDN
107 smvp.cn 石山CDN
108 Suirui.com 随锐CDN
109 Woan.cm.cn 沃安CDN
110 Ku6ms.com 酷6CDN
111 sobeycloud.com 索贝云CDN
112 skygrande.com 云雅CDN
113 nanoyun.com 新锐天博CDN
114 Onecloud.com 亦云CDN
115 573v.cn 遨游讯海CDN
116 Tsytv.com.cn 天山云CDN
Sinnet.com.cn 光环新网CDN

国外CDN服务提供商大全,包括Akamai、CDNetworks、Edgecast、Limelight、CloudFlare、amazon

1 Akamai.com Akamai
2 CDNetworks.com KDDI
3 Edgecast.com Edgecast
4 Limelight.com Limelight
5 CloudFlare.com CloudFlare
6 Xycdn.com ProCDN
7 fastly.com fastly
8 aws.amazon.com CloudFron
9 Cachefly.com Cachefly
10 Cdn77.com CDN77
11 cdnify.com CDNify
12 cdnsun.com CDNsun
13 cdnvideo.com CDNvideo
14 highwinds.com Highwinds
15 Incapsula.com Incapsula
16 internap.com Internap
17 keyCDN.com KeyCDN
18 Leaseweb.com Leaseweb
19 Level3.com Level3
20 maxcdn.com MaxCDN
21 gnenix.com GNENIX
22 Quantil.com QUANTIL
23 tatacommunications.com TATA
24 xcdn.cn XCDN

盘点国内常用 CDN 公共库加速服务

百度公共CDN为站长的应用程序提供稳定、可靠、高速的服务。包含全球所有最流行的开源JavaScript库。



更快更稳定:百度公共DNS拥有和百度搜索一样的基础网络、基础设施以及系统架构。



纯净无劫持:作为中国最大的流量公司,百度是DNS劫持的最大受害者。百度做公共DNS的目的一方面在于为广大网民提供一个纯净安全的流量环境,另外一方面也想通过产品的力量来制约劫持乱象。

安全防护:百度公共DNS的另外一个附加功能是安全防护。依托百度安全搜索技术,如果您所访问的网站存在病毒、木马风险,我们将实时予以拦截和提示,有效保证使用者的上网安全。



CDN亲和:百度公共DNS拥有遍布全国的递归出口节点。当查询请求未命中主缓存时,我们会将请求调度到离用户最近的递归节点来进一步查询。因此不会影响到CDN的调度进度。另外一方面,我们正在积极实施edns-client-subnet,该技术会大幅提升CDN调度精度,相信CDN厂商会喜欢。

又拍云JS库CDN服务



 

又拍云存储是杭州纬聚网络有限公司旗下项目,成立于2005年6月,主要专注于海量小文件的存储与分发及图片云计算领域。提供的两大核心服务:静态文件云存储、CDN加速处理。



“做静态资源分发的又拍云 ‘云分发’ 推出动态作图”,这个表述听起来有些拗口。简单说,就是国内云存储和 CDN 服务商又拍云(产品品牌名现改为 “UPYUN”)。



UPYUN推出的 “云分发” 是一项专注于图片、音频、视频等静态文件的 CDN 服务。



UPYUN “云分发” 可以理解为是将 UPYUN 自身的服务器替换为开发者服务器,其他一切条件基本相同。而所谓 “动态作图” 的概念,包括了两层含义:一是,开发者无需像使用传统 CDN 一样,在上传文件前先做出对应的缩略图版本,“云分发” 可以动态地对原图文件进行调取和处理。二是,UPYUN “云分发” 在各个 CDN 节点缓存的缩略图文件,可以与开发者服务器上的文件实现版本同步。



新浪云计算CDN公共库



浪云计算是新浪研发中心下属的部门,主要负责新浪在云计算领域的战略规划,技术研发和平台运营工作。主要产品包括 应用云平台Sina App Engine(简称SAE)。



AE是Sina App Engine的简称,新浪研发中心于2009年8月开始内部开发,并在2009年11月推出,SAE是新浪云计算战略的核心组成部分。



SAE选择在国内流行最广的Web开发语言PHP作为首选的支持语言,Web开发者可以在Linux/Mac/Windows上通过SVN或者Web版在线代码编辑器进行开发、部署、调试,团队开发时还可以进行成员协作,不同的角色将对代码、项目拥有不同的权限。



SAE平台安全分为SAE应用安全和SAE账号安全两个部分,SAE应用安全又分为数据安全和代码安全两部分,SAE账号安全分为管理安全和消费安全两部分。

SAE安全实践有两种隔离方法,分为沙箱隔离和服务隔离,其中,沙箱隔离分为PHP沙箱、Python沙箱、Java沙箱;服务隔离又分为存储类服务(MySQL)、计算类服务(Image)。



SAE安全实践的访问安全也分为两类,一类是对内访问安全,一类是对外访问安全,对内访问安全包括验证方式、网络控制;对外访问安全包括验证方式、网络控制、防火墙。



七牛云存储 开放静态文件CDN



像 Google Ajax Library,Microsoft ASP.net CDN,SAE,Baidu,Upyun 等 CDN 上都免费提供的 JS 库的存储,但使用起来却都有些局限,因为他们只提供了部分 JS 库。但七牛云存储提供一个尽可能全面收录优秀开源库的仓库,并免费提供 CDN 加速服务。



七牛云存储是由七牛提供的在线存储服务,通过云端接口向企业客户提供网上无限存储空间,和传统的云存储服务(如 Amazon S3)不同,七牛云存储还增加了上传下载传输加速以及富媒体云端处理特性.



目前七牛已经拥有数千家客户,你会发现其中有很多都是像知乎、Weico、Camera360、美图秀秀、蝉游记和Vida等UGC(用户产生内容)类产品,尤其是在图片社交领域。这是因为,除了我在前面所说的“云存储”比传统方案更节省成本外,七牛云存储还有一个独一无二的特性――支持用户将文件从客户端直传到云服务器中。



常见的云存储上传文件流程一般如下: 用户 =>应用服务器 =>云存储提供商 这样多了一次上传的流程,和本地存储相比,会相对慢一些。 而七牛提供了客户端自传的功能,流程可以改成: 用户 =>七牛 =>应用服务器 用户直接上传到七牛的服务器,通过DNS智能解析,七牛会选择到最近的最合适的ISP服务商节点,速度会比原先快很多,上传成功以后,七牛的服务器使用回调功能,只需要将非常少的数据(比如key)post回应用服务器,应用服务器进行保存即可。

360网站卫士CDN前端公共库

 

托管在360众多的全国CDN节点上,覆盖电信、联通、移动等主流运营商线路,您可以在自己的网页上直接通过script标记引用这些资源,让网站访问速度瞬间提速!



360 CDN是360网站卫士中一项网页加速功能,可防止CC、DDos攻击,本身以安全为首任的360,其CDN商品也声称具有防跨站、防注入、防篡改,防挂马等功能,尤其是加速设置中可自行设置缓存内容,网站速度不快的站长建议使用360 CDN,360网站加速因为多节点的配置使得其在国内加速效果不错。



360网站安全检测服务(webscan.360.cn)是国内最大的免费网站安全检测产品,独有漏洞检测、漏洞修复和后门识别查杀等功能,目前已经为14亿个网站页面进行过安全检测,发现漏洞7600多万个,为近百万家网站提供了全面的安全评估服务。此外,广大站长可以同时部署免费的360网站卫士,既可以有效防范各类黑客攻击,更能够为网站访问提供CDN加速、云安全防护等实用功能。



360的步伐现在是越来越快了。各种技术和提供的服务更新的速度是飞快的。提供了大多数的前端js库,还在自己的服务器上面缓存了Google的前端公共库和免费字体库,这个算是其他国内的cdn公共库没有的。

国内5种主要的CDN市场,你都了解吗?传统专业CDN、云CDN提供商、代理CDN厂商、自建的CDN、创新型CDN

国内CDN市场将迎来更加激烈的竞争,当下国内CDN市场主要包括5种类型:

1传统的专业CDN提供商

主要包括蓝汛通讯、网宿科技和帝联科技等,通过企业自身建设的服务器,提供专业的CDN服务;



网宿科技是国内领先的互联网业务平台提供商。网宿科技通过与国内外各大基础电信运营商合作,形成了跨运营商的全球互联网业务平台,IDC、CDN节点近百个,拥有带宽峰值可达600G。网宿依托丰富的IDC资源和强大的研发力量,已建立覆盖全国的CDN网络,自建的研发中心在近几年先后成功地研发了数据中心管理平台、CDN技术2.0加速平台和Myview2.0 流量可视平台、Web加速平台、流媒体分布加速平台、高速下载平台、速通VPN管理平台等,其中速通VPN管理平台被认定为“国家高新技术成果转化项目”;

 

帝联是专业的CDN服务商,为传统互联网、移动互联网、企业应用提供最具专业性的CDN加速服务,提升用户的网络体验度,最终使企业获得用户的青睐,增加用户粘度的过程中得到收入的转化。帝联科技在全国各主要城市拥有250多个节点,带宽储备突破2500G,网络节点设备超过6500台,通过自主研发的EasyCDN网络加速技术,实现在互联网动静态页面、文件传输过程中的上传下载与分发、流媒体视频点播与直播等应用方面的高品质访问,从而帮助客户改善最终用户的互联网访问体验。

 

北京蓝汛是中国领先的专业CDN服务提供商。是一家完全拥有自主产权的 CDN 服务商。凭借 16 年的积累,拥有每天 96 亿次网页展示、每天 9.6 亿移动和互联网终端客户、每天 9.7 亿次视频及多媒体文件传输等海量承载能力的 CDN 平台。建立了较为成熟的研发团队,结合产品与市场结合,推出了满足客户需求的多种产品,从网站加速、移动加速、企业内网/应用加速再到视频直播/点播加速,覆盖互联网、金融、广电/媒体、政府、传统行业、快销、教育行业等,提升了各种商业环境网络的速度。

2传以阿里云、腾讯云、UPYUN为代表的云CDN提供商

阿里CDN服务器原先主要用于淘宝图片的分发,在全国32省(市、区)均有服务器,有200多个节点,在一线城市运营商均有机房,甚至在外国也有30余个节点分布,以提供国外用户的加速服务。

 

腾讯云CDN国内节点达到400+个,分布在6个地区,28个省份,20+个运营商,带宽总量超过20T。2014年腾讯云CDN已覆盖香港和美国节点,2015年将扩大海外资源分布,支持全面的海外的加速。

 

UPYUN 依托超大规模的处理集群,提供图片缩略图、音视频转码等服务。让用户轻松享用大规模云端处理能力。CDN服务作为UPYUN的核心优势,依赖于全球130个CDN节点,未来UPYUN也将在CDN节点拓展方面继续投资。

3以Ucloud、七牛为代表的代理CDN厂商



UCloud推出北美节点加速服务后,迅速扩展至全球37节点。其中北美13节点,南美2个,欧洲8个,亚太地区11个,南非2个,澳洲1个。意味着UCloud已率先推出国内CDN厂商、云服务厂商中海外加速节点全球覆盖率最高的分发方案。UCloud应移动互联网时代的CDN服务也同样具备如下特征:1.满足高速访问需求,即由云计算发展而来;2.满足全球访问需求,在全球部署节点;3.满足中立第三方原则,规避潜在竞争和站队;4.服务统一,给予初创企业平等的服务待遇;5.价格透明,适合初创企业的服务价格。

 

作为国内领先的一站式数据管理服务厂商。七牛将牛多家CDN服务商整合到我们的数据服务生态上来,通过持续引入国内外主流CDN,来提升访问体验。七从最早的在线数据存储、数据访问加速、图片音视频等富媒体数据处理,再到近期推出的一系列第三方数据处理服务,比如色情图片识别功能(鉴黄云服务)等七牛已经拥有了20多万家用户,范围覆盖各行业:新型移动互联网,例如知乎网、36Kr、美图秀秀、饿了么、足记等;传统互联网,例如网易、顺丰科技、平安、大众点评网、汽车之家等;转型中的传统企业厂商,例如步步高、OPPO、中兴、海康威视等;新兴硬件,例如乐蛙科技。每天上传文件达到5亿个。

4互联网企业自建的CDN平台

百度在全国建设100多个CDN节点,除了用于自身搜索引擎业务外,还为用户提供云加速服务,CDN节点在京津冀、东部和南部沿海、华中、四川等地区覆盖较密。

 

优酷作为国内最顶尖的视频服务提供商,其对于CDN的运用主要集中在自身在线视频直播及点播业务,其境外主要覆盖北美、港澳台、日韩、新加坡、澳洲和英国,境内主要覆盖北上广深以及长三角、珠三角地区。

 

搜狐也自建了167Gbps的CDN,共有29个节点,1000多台服务器,主要用于自身页面加速,国际上主要覆盖美国和亚洲。

 

5以迅雷为代表的创新型CDN提供商

以迅雷为代表的创新型CDN提供商,其主要特点通过P2P的技术和众筹智能硬件的模式来扩展节点,实现无限节点的CDN服务模式。简单来说,就是通过智能硬件收集家庭宽带中闲置的流量,然利用这些流量和硬件节点,建立起一个结构庞大、覆盖面极广的CDN节点网络。这是共享经济在CDN领域的体现。

 

技术创新可以说是迅雷CDN服务的砝码之一,也是迅雷重新定义CDN的开始,主要表现在以下几点:



一.无限结点



迅雷让普通家庭用户分享自己的闲置带宽,通过集中优化后再输送给企业,企业用以提升用户体验,在这个过程中,用户得到了实实在在的收益,迅雷实现了十万级的节点布局,企业也可以在提升服务质量的情况下,大幅缩减成本。



二.星域调度



实现对海量信息和数据的实时处理,并通过星域调度打造”无限节点式内容分发网络”.使用户可实现住宅小区内拉取内容数据,让CDN传输距离近至一公里,速度更快,稳定性更佳。



三.动态防御



主要体现在两个方面:一是有效防止DDOS攻击,二是动态防盗链。



四.弱网加速



在偏远地方,如乡村、酒店等,网络信息弱的情况下,获取信息时容易出现断网、网速慢等现象。得益于迅雷的无限节点,用户可以通过近距离的节点获取信息,从而得到更优的网络服务体验。

我国骨干网国际出口带宽5266G 中电信独占近60%

1月22日,CNNIC正式发布了第37次中国互联网统计报告。报告披露了我国的互联网基础资源。截至2015年12月,我国IPv4地址数量为3.37亿个,拥有IPv6地址20594块/32;域名总数为3102万个,其中“.CN”域名总数达到1636万个;网站总数为423万个,年增长26.3%;国际出口带宽为5392116Mbps,年增长30.9%。

 

作为与用户上网体验息息相关的国际出口带宽,在过去的一年中增长了30.9%;其实,从2010年以来,我国的国际出口带宽一直保持着20%以上的增长,其中在2013年,增长率更是达到了79.33%。

 

从骨干网络国际出口带宽数的分配来看,三大基础电信运营商占到了很大的比重;其中,中国电信和中国联通作为两家固网基础资源最为丰富的运营商,资源整体占比非常高;特别是中国电信一家就占到近60%。

RTMP与HLS压力测试工具安装与配置

服务器负载测试工具(st-load):

1. 模拟huge并发:2G内存就可以开300k连接。基于states-threads的协程。

2. 支持HLS解析和测试,下载ts片后等待一个切片长度,模拟客户端。支持HLS点播和直播。

3. 支持HTTP负载测试,所有并发重复下载一个http文件。可将80Gbps带宽测试的72Gbps。

4. 支持RTMP流测试,一个进程支持5k并发。使用nginx-rtmp的协议直接将chunk流解析为messgae。

state-threads用来模拟超级并发,并简化异步socket的逻辑为同步socket,http-parser解析http协议部分。

这两个库设计都很巧妙,所以我开了一个项目:https://github.com/winlinvip/st-load

state-threads之前就有写过文章说明,那时候主要是支持高并发的rtmp服务器,也是并发和异步变为同步的协程很方便。

http-parser用yum就可以search到,它其实设计得也相当巧妙,相当于只是解析buffer的http内容,并不负责网络部分。libcurl/poco等都带了网络处理,所以不合适。

举例说明,http_parser_parse_url这个函数,解析url,设计得非常有意思,不是返回字符串,而是返回位置索引,譬如主机头在什么位置长度多长等等。

[root@localhost ~]# yum install git unzip patch gcc gcc-c++ make
[root@localhost ~]# git clone https://github.com/winlinvip/st-load.git

[root@localhost st-load]# ./configure
[root@localhost st-load]# make

[root@localhost st-load]# ls objs/
http-parser-2.1 src st_hls_load st_rtmp_load st_rtmp_publish
Makefile st-1.9 st_http_load st_rtmp_load_fast
[root@localhost st-load]#
模拟RTMP用户
./st_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream
模拟HLS直播用户
./st_hls_load -c 1 -r http://127.0.0.1:3080/hls/hls.m3u8
模拟HSL点播用户
./st_hls_load -c 10000 -o -r http://127.0.0.1:3080/hls/hls.m3u8
模拟RTMP推流用户
./st_rtmp_publish -i doc/source.200kbps.768×320.flv -c 1 -r rtmp://127.0.0.1:1935/live/livestream
模拟RTMP多路推流用户
./st_rtmp_publish -i doc/source.200kbps.768×320.flv -c 1000 -r rtmp://127.0.0.1:1935/live/livestream_{i}

支持RTMP流播放测试,一个进程支持5k并发
支持RTMP流推流测试,一个进程支持500个并发。

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

1.先添加几个RPM下载源

     1.1)安装RPMforge的CentOS6源
     [root@AY130611215205Z ~]# wget -c http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
     [root@AY130611215205Z ~]# rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt
     [root@AY130611215205Z ~]# rpm -i rpmforge-release-0.5.3-1.el6.rf.*.rpm    

     1.2)安装epel源
     [root@AY130611215205Z ~]# wget -c http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
     [root@AY130611215205Z ~]# rpm -Uvf epel-release-6-8.noarch.rpm

     安装完成,查看一下源列表,看到rpmforge和epel字样即可
     [root@AY130611215205Z ~]# ls -lh /etc/yum.repos.d

2.安装转码工具Mencoder及ffmpeg(约定:每个小点操作之前先回到用户主目录,即cd ~)

     2.1)安装一些基础包,不用担心重复,已经存在的会自动忽略或升级
     [root@AY130611215205Z ~]# yum install gcc make automake bzip2 unzip patch subversion libjpeg-devel
     [root@AY130611215205Z ~]# wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
     [root@AY130611215205Z ~]# tar zxvf yasm-1.2.0.tar.gz
     [root@AY130611215205Z ~]# cd yasm-1.2.0
     [root@AY130611215205Z yasm-1.2.0]# ./configure
     [root@AY130611215205Z yasm-1.2.0]# make && make install
     [root@AY130611215205Z yasm-1.2.0]# cd ~
     
     2.2)卸载系统原有的ffmgeg和x.264,没有则跳过
     [root@AY130611215205Z ~]# yum remove ffmpeg x264

     2.3)先安装一些Mplayer编码库(仅限于64位系统)
     [root@AY130611215205Z ~]# wget -c http://www2.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2
     上面这一步可能在部分VPS上无法下载,比如我的阿里云VPS就提示连接失败,但是可以用本机浏览器下载后上传到VPS的/root根目录去,然后继续下面的操作
     [root@AY130611215205Z ~]# tar xvjf essential-amd64-20071007.tar.bz2
     [root@AY130611215205Z ~]# mkdir /usr/local/lib/codecs
     [root@AY130611215205Z ~]# cp -Rvp essential-amd64-20071007/* /usr/local/lib/codecs/

     编辑下面文件
     [root@AY130611215205Z ~]# vim /etc/ld.so.conf
     添加以下两行到上面的文件里
     /usr/lib 
     /usr/local/lib
     
     2.4)再安装一些格式转换常用的编码库
     [root@AY130611215205Z ~]# yum install faac-devel  lame-devel amrnb-devel opencore-amr-devel amrwb-devel  libvorbis-devel libtheora-devel xvidcore-devel
     
     2.5)安装x.264
     [root@AY130611215205Z ~]# wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/last_stable_x264.tar.bz2
     [root@AY130611215205Z ~]# tar xvjf last_stable_x264.tar.bz2
     [root@AY130611215205Z ~]# cd x264-snapshot-20140219-2245-stable/     (这可能日期有区别,自己ls一下)
     [root@AY130611215205Z x264-snapshot-20140219-2245-stable]# ./configure –enable-shared –enable-pic
     [root@AY130611215205Z x264-snapshot-20140219-2245-stable]# make && make install
     [root@AY130611215205Z x264-snapshot-20140219-2245-stable]#  cd ~

     2.6)安装libvpx
     [root@AY130611215205Z ~]# wget http://webm.googlecode.com/files/libvpx-v1.2.0.tar.bz2
     [root@AY130611215205Z ~]# tar xvjf libvpx-v1.2.0.tar.bz2
     [root@AY130611215205Z ~]# cd libvpx-v1.2.0
     [root@AY130611215205Z libvpx-v1.2.0]# ./configure –enable-shared –enable-pic
     [root@AY130611215205Z libvpx-v1.2.0]# make && make install
     [root@AY130611215205Z libvpx-v1.2.0]# cd ~

     2.7)安装FFmpeg
     [root@AY130611215205Z ~]# wget http://ffmpeg.org/releases/ffmpeg-2.0.1.tar.bz2
     [root@AY130611215205Z ~]# tar xvjf ffmpeg-2.0.1.tar.bz2
     [root@AY130611215205Z ~]# cd ffmpeg-2.0.1
     [root@AY130611215205Z ffmpeg-2.0.1]# ./configure –enable-gpl –enable-version3 –enable-shared –enable-nonfree –enable-postproc –enable-libfaac –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libvorbis –enable-libvpx –enable-libx264 –enable-libxvid
     [root@AY130611215205Z ffmpeg-2.0.1]# make && make install
     [root@AY130611215205Z ffmpeg-2.0.1]# cd ~
     
     让动态链接库被系统共享
     [root@AY130611215205Z ~]# ldconfig

     2.8)最后安装mencoder
     [root@AY130611215205Z ~]# yum install mplayer mencoder flvtool2

     查看一下已经安装好的音频和视频编码器
     查看所有所支持的音频编码
     [root@AY130611215205Z ~]# mencoder -oac help
     查看所有所支持的视频编码
     [root@AY130611215205Z ~]# mencoder -ovc help
     具体结果可参考http://www.mplayerhq.hu/DOCS/HTML/zh_CN/menc-feat-selecting-codec.html

3.安装配置Nginx
     
     3.1)先安装各种依赖(nginx需要pcre支持,yamdi用来为flv创建关键帧才能随意拖动)
     [root@AY130611215205Z ffmpeg-2.0.1]# yum install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel yamdi
     
     3.2)下载所需的nginx模块
     第一个是nginx_mod_h264_streaming,让nginx支持flv/mp4流播放
     [root@AY130611215205Z ~]# wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
     [root@AY130611215205Z ~]# tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
     注意:先要修改一下这家伙的源码,注释掉nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c的158到161行
     /* TODO: Win32 */
     //if (r->zero_in_uri)
     // {
     //   return NGX_DECLINED;
     // }

     第二个是nginx-rtmp-module,让nginx支持rtmp/hls协议
     [root@AY130611215205Z ~]# wget -O nginx-rtmp-module.zip  https://github.com/arut/nginx-rtmp-module/archive/master.zip
     [root@AY130611215205Z ~]# unzip nginx-rtmp-module.zip
     下载清缓存的模块
     [root@AY130611215205Z ~]# wget -O ngx_cache_purge.zip https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip
     [root@AY130611215205Z ~]# unzip ngx_cache_purge.zip
     
     3.3)下载安装nginx
     [root@AY130611215205Z ~]# wget http://nginx.org/download/nginx-1.2.9.tar.gz
     [root@AY130611215205Z ~]# tar zxvf nginx-1.2.9.tar.gz
     [root@AY130611215205Z ~]# cd nginx-1.2.9
     [root@AY130611215205Z nginx-1.2.9]# ./configure –user=daemon –group=daemon –prefix=/usr/local/nginx/ –add-module=../nginx-rtmp-module-master –add-module=../ngx_cache_purge-master –add-module=../nginx_mod_h264_streaming-2.2.7 –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module –with-http_gzip_static_module –with-http_flv_module
     [root@AY130611215205Z nginx-1.2.9]# make && make install
     PS:若提示make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1,请参考3.3.2小节的注意点,然后重新运行./configure这一段 
     
     /**———以下是安装了Tengine后重新编译的代码,模块的路径自己对一下———**//
./configure –user=www –group=www –prefix=/usr/local/tengine/ –add-module=../../../nginx-rtmp-module-master –add-module=../../../ngx_cache_purge-master –add-module=../../../nginx_mod_h264_streaming-2.2.7 –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module –with-http_gzip_static_module –with-http_flv_module –with-http_concat_module=shared –with-http_sysguard_module=shared –with-google_perftools_module –with-http_image_filter_module
     
     运行一下nginx
     [root@AY130611215205Z ~]# /usr/local/nginx/sbin/nginx
     然后用浏览器你的服务器IP,看到welcome就对了
     或者到nginx的sbin目录下,运行一下nginx -V,看看列表出来的modules对不对

     3.4)各种配置nginx
     编辑/usr/local/nginx/conf/nginx.conf文件,最好用sftp软件(如windows下的flashfxp/Mac下的tramnsmit)下载过来本地编辑。
     贴一下我的配置文件:(目录需要自己改动,我用的是阿里云的数据盘,所以到/mnt/里面去了)
     ———————————————————————nginx配置文件—————————————————
    #filename:nginx.conf
    #user  nobody;
    worker_processes  1;

    error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    pid        logs/nginx.pid;

    events {
        use epoll;
        worker_connections  1024;
    }

    rtmp {
        server {
            listen 1935;
            chunk_size 4000;

            # video on demand
            application vod {
                play /mnt/media/vod;
            }

            # HLS
            # HLS requires libavformat & should be configured as a separate
            # NGINX module in addition to nginx-rtmp-module:
            # ./configure … –add-module=/path/to/nginx-rtmp-module/hls …
            # For HLS to work please create a directory in tmpfs (/tmp/app here)
            # for the fragments. The directory contents is served via HTTP (see
            # http{} section in config)
            #
            # Incoming stream must be in H264/AAC/MP3. For iPhones use baseline H264
            # profile (see ffmpeg example).
            # This example creates RTMP stream from movie ready for HLS:
            #
            # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
            #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
            #    -f flv rtmp://localhost:1935/hls/movie
            #
            # If you need to transcode live stream use ‘exec’ feature.
            #
            application hls {
                hls on;
                hls_path /mnt/media/app;
                hls_fragment 10s;
            }
        }
    }

    http {

        include mime.types;
        default_type application/octet-stream;
        sendfile on;
        keepalive_timeout 65;
        gzip on;
        
         #log format

        log_format  access  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                 ‘$status $body_bytes_sent “$http_referer” ‘
                 ‘”$http_user_agent” $http_x_forwarded_for’;    
        
         #定义一个名为addr的limit_zone,大小10M内存来存储session
        limit_conn_zone $binary_remote_addr zone=addr:10m;     

        server {
            listen 8080;
             server_name localhost;

             # HTTP can be used for accessing RTMP stats
            # This URL provides RTMP statistics in XML
            location /stat {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl;
            }
            location /stat.xsl {
                root /mnt/soft/nginx-rtmp-module-master;
            }
             location /control {
                rtmp_control all;
            }
            location / {
                root /mnt/soft/nginx-rtmp-module-master/test/rtmp-publisher;
            }
        }
        
         server {
            listen 80;
             server_name localhost;
             
            location / {
                    root /mnt/wwwroot;
                    index index.html;
                  }         

             location ~ \.flv$ {
                   root /mnt/media/vod;
                 flv;
                 limit_conn addr 20;
                 limit_rate 200k;
            }
            location ~ \.mp4$ {
                 root /mnt/media/vod;
                 mp4;
                 limit_conn addr 20;
                 limit_rate 200k;
            }

             location /hls {
                # Serve HLS fragments
                alias /mnt/media/app;
            }

             access_log  logs/nginxflv_access.log access;
        }
        
           
    }
     ——————————————————nginx配置文件——————————————
     
4.把自己的电影转换成mp4和flv格式来测试nginx搭的环境

     4.1)准备两部电影,硬盘上随便找,我找了“谍影重重A.mp4”和“鹿鼎记033.rmvb”,尽量找小一点十来分钟的,等下我们还要看完测试一下转换的结果有没有音影不同步的情况。
     我把两部电影重命名为 movie1.mp4和 movie2.rmvb,并上传到服务器/mnt/media/video下面,这里目录用来存放我们的原始视频。还有一个目录是/mnt/media/vod 用来存放转换后的视频。
     我这里的具体目录结构为:
     /mnt/media/video -> 存放原始视频
     /mnt/media/app  -> 存放转成m3u8的视频,供http访问(HLS)
     /mnt/media/vod  -> 存放转换后的flv和mp4视频,供http或rtmp访问

     4.2)用ffmpeg转换mp4文件(ffmpeg不支持rmvb)
     [root@AY130611215205Z ~]# cd /mnt/media/video/
     [root@AY130611215205Z video]# ffmpeg -i movie1.mp4 -y -vcodec libx264 -vf scale=”640:-1″ -r 15 -acodec libfaac ../vod/movie1.flv
     -y:文件覆盖,-vf scale=”640:-1”:尺寸调整为宽度640高度自动,-r 15:帧数15fps,这里用libfaac音频编码防止转成ts格式时iPhone没有声音
     
     添加关键帧用来支持拖动播放
     [root@AY130611215205Z video]# cd ../vod
     [root@AY130611215205Z vod]# mv movie1.flv movie1-src.flv
     [root@AY130611215205Z vod]# yamdi -i movie1-src.flv -o movie1.flv
     [root@AY130611215205Z vod]# rm -rf movie1-src.flv

     接下来测试的话,下载VLC Player到本地测试(VLC有时候会花屏,用JWPlayer就好了),或者不行麻烦的话装一个apache服务器并下载JWPlayer来测试。
     测试播放地址为(地址已失效,请勿访问)
     HTTP形式访问:      http://121.199.47.208/movie1.flv
     RTMP形式访问:      rtmp://121.199.47.208/vod/movie1.flv

     4.3)用mencoder转换rmvb文件
     
     4.4)把flv转换成hls的m3u8
     下载安装segmenter
     [root@AY130611215205Z ~]# yum install -y curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel git
     [root@AY130611215205Z ~]# git clone https://github.com/johnf/m3u8-segmenter.git
     [root@AY130611215205Z ~]# cd m3u8-segmenter/
     [root@AY130611215205Z m3u8-segmenter]# gcc -Wall -g m3u8-segmenter.c -o segmenter -lavformat
     [root@AY130611215205Z m3u8-segmenter]# cp segmenter /usr/bin/
     
     转换成ts,片源大小及清晰度等取决于flv文件,所以转成flv的时候一定要统一起来
     [root@AY130611215205Z vod]# cd /mnt/media/vod
     [root@AY130611215205Z vod]# mkdir /mnt/media/app/movie1/
     [root@AY130611215205Z vod]# ffmpeg -y -i movie1.flv -f mpegts -c:v copy -c:a copy -vbsf h264_mp4toannexb /mnt/media/app/movie1/main.ts
     
     切片
     [root@AY130611215205Z movie1]# cd /mnt/media/app/movie1/
     [root@AY130611215205Z movie1]# segmenter -i main.ts -d 10 -p movie1 -m movie1.m3u8 -u http://121.199.47.208/hls/movie1/
     -d 10:每个切片为10秒,-p movie1:切片的名字的前缀
     -u URL地址:m3u8中播放列表的地址前缀,自己cat一下生成的movie1.m3u8就知道什么用 了
     

     测试一下,用iPhone的Safari访问一下http://121.199.47.208/hls/movie1/movie1.m3u8

     注:安装日志记录于半年前的evernote,现在才贴出来的,所以文中的视频访问地址都已经失效了。

Nginx搭建hls流媒体服务器

第一种方案:ffmpeg+nginx

 
新的ffmpeg已经支持HLS。(本人也参与了代码供献,给自己做个广告:))
 
点播:
生成hls分片:
ffmpeg -i <媒体文件> -c:v libx264 -c:a -f hls /usr/local/nginx/html/test.m3u8 
直播:
ffmpeg -i udp://@:1234 -c:v libx264 -c:a -f hls  /usr/local/nginx/html/test.m3u8
建立web服务器:
默认配置就可以。
 server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
}
 
 
 
启动nginx。
 
客户端访问:http://IP/test.m3u8
 
在windows上可以用vlc播放。
 
 
 
第二个文案,用nginx-rtmp-module
 
      
rtmp {
 
    server {
 
        listen 1935;
 
        chunk_size 4000;
      
        #HLS
 
        # For HLS to work please create a directory in tmpfs (/tmp/app here)
        # for the fragments. The directory contents is served via HTTP (see
        # http{} section in config)
        #
        # Incoming stream must be in H264/AAC. For iPhones use baseline H264
        # profile (see ffmpeg example).
        # This example creates RTMP stream from movie ready for HLS:
        #
        # ffmpeg -loglevel verbose -re -i movie.avi  –vcodec libx264 
        #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 
        #    -f flv rtmp://localhost:1935/hls/movie
        #
        # If you need to transcode live stream use ‘exec’ feature.
        #
        application hls {
            live on;
            hls on;
            hls_path /tmp/app;
            hls_fragment 5s;
        }
    }
}
 
http {
 
    server {
 
        listen      80;
        location /hls {
            # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            alias /tmp/app;
            expires -1;
        }
    }
}

Nginx防盗链根据UA屏蔽恶意User Agent请求

相对于 Apache,Nginx 占用的系统资源更少,更适合 VPS 使用。恶意盗链的 User Agent 无处不在,博客更换到 WordPress 没几天,就被 SPAM(垃圾留言)盯上,又被暴力破解后台用户名密码。以前介绍过 Apache 使用 .htaccess 屏蔽恶意 User Agent,今天来介绍 Nginx 屏蔽恶意 User Agent请求的方法。

先上规则&注释

#禁用未初始化变量警告
uninitialized_variable_warn off;
#匹配各种 bad user agent,返回403错误
if ($http_user_agent ~* "embeddedwb|NSPlayer|WMFSDK|qunarbot|mj12bot|ahrefsbot|Windows 98|MSIE 6.0; Windows 2000|EasouSpider|Sogou web spider") {
return 403;
}
#匹配POST方法,给变量iftemp赋值
if ($request_method ~* "POST") {set $iftemp X;}
#匹配 bad user agent,给变量iftemp赋值;这几个UA主要是发垃圾留言的
if ($http_user_agent ~* "MSIE 6.*NET|MSIE 7.*NET|MSIE 6.*SV1|MSIE 6.0; Windows NT 5.0") {
set $iftemp "${iftemp}Y";
}
#如果变量iftemp符合上面两个条件,返回403错误
if ($iftemp = XY) {return 403;}



禁用未初始化变量警告,不然会不停写入警告到错误日志error.log,如下

2014/09/11 09:21:11 [warn] 18649#0: *132 using uninitialized “iftemp” variable, client: 220.181.51.209, server: www.wilf.cn, request: “GET /wp-content/themes/dazzling/inc/fonts/glyphicons-halflings-regular.woff HTTP/1.0”, host: “www.wilf.cn”, referrer: “http://www.wilf.cn/”

2014/09/11 09:21:11 [warn] 18649#0: *92 using uninitialized “iftemp” variable, client: 66.249.79.55, server: www.wilf.cn, request: “GET /page/14?mod=pad&act=view&id=741 HTTP/1.1”, host: “www.wilf.cn”

Nginx 规则不支持2个以上的条件判断,绕个路,通过给变量两次赋值来完成2个条件判断。

Nginx 规则也是使用正则表达式匹配字符串,分析日志,根据需要自己定制。

检验成果的时候到了

183.60.214.51 — [10/Sep/2014:22:16:18 +0800] — Bytes: 13507 — GET /?mod=pad&act=view&id=460 HTTP/1.1 — 403 — – — Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html) — – — –

220.181.125.169 — [11/Sep/2014:09:38:15 +0800] — Bytes: 169 — GET /page/51?mod=wap&act=AddCom&inpId=860 HTTP/1.1 — 403 — – — Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) — – — –

EasouSpider 和 Sogou web spider,再也不见。

http://www.wilf.cn/post/block-bad-user-agent-on-nginx-sever.html