阿里云 CDN HTTPS 最佳实践系列——HTTP/2(二)
来源:互联网 发布:数据库事务 编辑:程序博客网 时间:2024/05/16 14:59
背景
HTTP/2 是最新的 HTTP 协议,已于2015年5月份正式发布,Chrome、 IE11、Safari 以及 Firefox 等主流浏览器已经支持 HTTP/2 协议。阿里云 CDN 在2016年7月份开始全网支持 HTTP/2,是国内第一家全网支持 HTTP/2 的 CDN 提供商。
HTTP/2 是新技术,一些底层代码库在实现时可能不完善,在一些特殊场景下可能就出问题,我们遇到过一些 android 库实现有问题,导致开启 HTTP/2 就经常访问失败,关闭 HTTP/2 就完全正常。所以对于一些 HTTP/2 有问题的域名需要关闭 HTTP/2,一些没有问题的域名不能关闭 HTTP/2。但是 Tengine(nginx)的 http2 开关参数是 ip:port 级别,不是 server 级别,也就是说如果多个域名同时使用同一个 IP,无法针对 server 来打开或者关闭。
上面的配置中,www.a.com 和 www.b.com 使用了同一个 IP 端口, www.a.com 打开了 http2,www.b.com 没有打开 http2,但是 www.b.com 的 http2 同样也被打开了,无法关闭。
我们知道,任何公司的 IP 资源都是稀缺的,很多域名都是共用一个 IP 或者 共用几个 IP,不可能为需要关闭 HTTP/2 的域名分配一个 IP 资源,所以最核心的需求就是针对域名级别来配置 HTTP/2 开启或者关闭。
实现
先来看一看 Tengine 中 ip:port 和 server 的关系:
多个 server 块可能会 listen 同一个 ip:port,一个 server 也可能 listen 多个 ip:port,所以 ip:port 和 server 是多对多的关系,但在 Tengine 配置块中并没有 listen 块,所以从配置文件中直观看 server 块包含了 listen,似乎 server 块比 listen 更底层,从而造成了在一个 server 块 listen 指令参数中配置了 http2 不会影响其他 server 的 http2 的假象,但其实 ip:port 更底层。
如上图所示,在 Tengine 配置解析阶段会把所有 server 块中配置的 listen ip:port 添加到一个 listening servers 表(数组)中,当 http 请求上来之后,先从这个表中查到 addr_conf 信息,在配置中 listen 指令的 flag 参数(比如: ssl、http2)都会放到这个结构中,并没有放到 server 中,所以就会导致这个 ip:port 的 listen 参数对所有关联的 server 生效。
阿里云 CDN 的实现是在 server 中加入了 listen 的参数信息,在使用 http2 这样的参数时使用真正的 server,而不是使用默认 server,另外我们也通过 lua ffi 的方式让 http2 的开关能在 lua 中来动态设置,从而 HTTP/2 的开关便可以通过 CDN 控制台根据域名来设置了。如图:
需要开启或者关闭 HTTP/2 的域名只需要在 CDN 控制台上修改一下就可以立马生效了。CDN 配置管理后台配置界面截图如下:
以上本文内容。目前,阿里云CDN HTTPS已经全面降价,后付费HTTPS 0.05元/万次请求。下一篇我们将介绍CDN HTTPS 动态密钥套件,敬请关注!
- 阿里云 CDN HTTPS 最佳实践系列——HTTP/2(二)
- 阿里云 CDN HTTPS 最佳实践系列——HTTP/2(二)
- 阿里云 CDN HTTPS 最佳实践系列——动态证书(一)
- 阿里云 CDN HTTPS 最佳实践系列——动态证书(一)
- 阿里云 CDN HTTPS 最佳实践——动态密钥套件(三)
- 阿里云 CDN HTTPS 最佳实践——OCSP Stapling(四)
- 阿里云 CDN HTTPS 最佳实践——动态密钥套件(三)
- 阿里云 CDN HTTPS 最佳实践——TLS record size(五)
- 阿里云 CDN HTTPS 最佳实践——TLS record size(五)
- 【满屏干货】阿里云CDN HTTPS最佳实践汇总
- 配置赛门铁克(Symantec)https证书:从阿里云申请免费赛门铁克(Symantec)https证书并配置到cdn
- VR系列——Oculus最佳实践:二、双眼视觉,立体成像和深度线索
- Flex工程(二)——最佳实践
- RESTful服务最佳实践——(二)
- 高德运维基于阿里云的最佳实践
- 高德运维基于阿里云的最佳实践
- 阿里云ECS服务器https配置实践
- 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响
- Android-带你从源码角度理解SharedPreferences存储原理
- Maven配置及使用
- hdu 3411 Snail Alice (等比数列递推)
- shiro(一)
- EvenBus初学
- 阿里云 CDN HTTPS 最佳实践系列——HTTP/2(二)
- 我们也说说Android.mk(1)
- group by 和 order by区别
- 正则趣事?哈哈哈哈
- Chapter 7.Better Living in Objectville
- html基础-表单控件、密码框、单选按钮、复选框、多行文本框、下拉列表、按钮(提交、图片、重置)
- WeChat小程序学习心得——模板使用
- SpringMVC与Web解读(一):SpringMVC环境构建与ContextLoaderListener
- 多媒体文件管理-数据库external.db,internal.db (一)