早上 腾讯云发了个关于 http2 的帖子[HTTP 2 的新特性你 get 了吗?]( https://www.v2ex.com/t/355553 )
看完之后很激动啊,自己的测试小站可以先搞起来啊。
之后就开始寻思,当前的情况是这样的:阿里一台服务器当作代理服务器,把所有请求代理到本地服务器。查了下 http2.0 在 nginx 下只要升级下 openssl ,装一个模块就可以了,然后就有个疑问:本地的服务器需要也支持 http2.0 吗?代理的原理是怎样的?
不懂就先百度,百度一圈好气啊,根本找不到答案,刚想发个帖请教下 V 友。忽然想到如果下面评论都是教我如何 google 的那多尴尬。随意 google 了下瞬间柳暗花明。
[The HTTP/2 Module in NGINX]( https://www.nginx.com/blog/http2-module-nginx/ )
里面写得很清楚啊, PPT 也写得很赞, NGINX 靠谱!
在最后的 Q&A 找到了答案
Q: Will you support HTTP/2 on the upstream side as well, or only support HTTP/2 on the
client side?
A: At the moment, we only support HTTP/2 on the client side. You can ’ t configure
HTTP/2 with proxy_pass. [Editor – In the original version of this post, this
sentence was incorrectly transcribed as “ You can configure HTTP/2 with proxy_pass.
” We apologize for any confusion this may have caused.]
But what is the point of HTTP/2 on the backend side? Because as you can see from
the benchmarks, there ’ s not much benefit in HTTP/2 for low ‑ latency networks such
as upstream connections.
Also, in NGINX you have the keepalive module, and you can configure a keepalive
cache. The main performance benefit of HTTP/2 is to eliminate additional handshakes,
but if you do that already with a keepalive cache, you don ’ t need HTTP/2 on the
upstream side.
刚看的时候也好气啊,为什么 http2 这么叼(看了腾讯云之后的感想)你却说他是包装 http1 的运输层?看到后来才感觉腾讯云里的这篇文章( https://www.qcloud.com/community/article/541321?fromSource=gwzcw.93353.93353 )可能更加的片面,官方博客的更加中肯。为这风格点赞,差点就跟了风。
前面 PPT 中有张图来展示 first painting http1.1>http2>https (有些企业确实为了访问速度放弃了 https ), 那这样一来,确实是不需要本地服务器 http2.0 ,明显用 http 比较快。
结论:这样一来,我的代理服务器改 http2 就变得简单了,只需要代理服务器 nginx 的 docker 镜像升级一下,其它的都不变就 OK 。暗爽
不知以上想法有没错误,还没有具体实践,如有纰漏请指正万分感谢!
1
alect 2017-04-18 14:54:22 +08:00
反代从源服务器取数据确实不支持 http/2
|
2
jayong 2017-04-18 15:54:09 +08:00
刚对比看了下腾讯和官方博客的,腾讯的太片面,稍不注意就误导人了啊。
|
3
ohshift 2017-04-18 20:39:58 +08:00
感谢分享
|
4
components 2017-04-18 21:20:46 +08:00
感谢分享
|
5
zealot0630 2017-04-18 21:52:59 +08:00
我觉得只是 NIGNX 开发者懒,既然 HTTP/2 全面碾压 HTTP/1.1 ,只不过在 upstream 方面提升比较小,他们就懒得做了而已
|
6
zealot0630 2017-04-18 21:53:55 +08:00
而且 不想用 SSL ,可以用 H2C 阿
|
7
pubby 2017-04-18 23:58:26 +08:00
反代使用 1.1 就够了吧
proxy_http_version 1.1; proxy_set_header Connection ""; |
8
laike9m 2017-04-18 23:59:56 +08:00 2
你要想深度了解 HTTP/2 ,网上大部分文章(包括英文的)都太浅。
之前写过一些协议的分析,可以看看: https://laike9m.com/blog/archive/ |
9
mritd 2017-04-19 00:15:15 +08:00 via iPhone 1
偷偷告诉你一个好消息,也是被坑过的地方, nginx 官方继续 alpine 的 docker 镜像自带 http2 支持(openssl 有布丁) 而基于 debian 的则不行
|
10
choury 2017-04-19 01:18:31 +08:00 via Android
@laike9m 论深入的话来看我对 http2 的实现 https://github.com/choury/sproxy/tree/master/prot
|
11
ryd994 2017-04-19 07:08:44 +08:00 via Android
|
12
byfar OP @zealot0630 官方说首屏访问速度 http>http2>https 只要代理用 http2 upstream 还是用 http1 ,所以说不考虑在 upstream 中支持 http2
原文: But what is the point of HTTP/2 on the backend side? Because as you can see from the benchmarks, there ’ s not much benefit in HTTP/2 for low ‑ latency networks such as upstream connections. 难道我理解错了? |
13
byfar OP @mritd 赞,我一直用官方的 latest 镜像,这个镜像 openssl 是 1.0.1 的,没有 http2 。刚看了下 alpine 的 dockerfile 确实有 http_v2_module 。
确实是个好消息呀,哈哈。 |
14
bbao 2017-04-19 11:30:18 +08:00 2
开启 http2 倒是挺简单的,安装 nginx 时候, openssl 使用 1.0.2 ;然后直接 ssl http2 就行;
关键是你们的客户端需要支持 http2 ,手机 okhttp 版本需要注意, android 和 ios 都有要注意的地方; android 高版本的手机才支持 http2 ;如果 2 年前的手机, okhttp 或者代码里支持 http2 ,发出的请求也可能是 http1 的;所以测试这块,需要特别的注意; http2 目前的抓包工具不好抓,常用的抓包工具,能代理手机上的,是没办反走 http2 的;如果已经支持了 http2 ,用 charles 或者其他的抓包工具,它也是自动转换成 http1.1 的; 所以要看的话,只能在 nginx 打印 protocol 的日志,然后用 wireshark ,抓在浏览器中接口的包;或者使用浏览器的 http2 判断的插件; 开启 http2 已经有几个月了,感觉还是挺好的; 开启 http2 之后,常规的 https 优化还是要做的。 |
16
bbao 2017-04-19 18:57:42 +08:00 2
@ohshift
1. 如果全站 HTTPS ,开启 STS ;避免每次 http 跳转到 https 多余的 302 跳转。 2. 设置 OCSP ,由服务器验证证书,避免客户端验证证书,客户端验证会多一步 ocsp 的域名解析、 tcp 握手、以及验证交互; 3. 会话复用, session_cache 、 session_ticket ;避免了再次建立连时的 服务器证书、公钥传递、如果是双向认证的话,也避免了客户端的; 4. 分布式的话 session_ticket 保存在每个服务器上,可以定时更新; 5. session_cache 也可以分布式保存; 6. 上面做完了,对性能要求更高的话,可以把公钥交换时计算的部分,在其他服务器上计算。这个需要修改源代码吧,要求可能更高一些;前 5 点是常规优化,了解完了,可以进行配置; 关于如何验证 ocsp 的过程, https://segmentfault.com/q/1010000007560751 我在这里自问自答了。 |