原文:https://www.clarencep.com/2016/11/17/upgrade-nginx-to-support-http2/

这两天把公司的网站升级到了全站https. 顺便瞄到了HTTP2的浏览器支持情况

支持得还都蛮好的嘛。忍不住试用了一把HTTP2 – 就直接拿本博客来做示例了。

升级nginx

主流浏览器基本上都支持了HTTP2,但是nginx只有升级到1.10以上版本才行 – 鄙站之前用的还是nginx 1.6的某个版本。

更新了下apt-get,发现仓库中没有1.10版本 – 囧 – 只好自己编译吧:

首先,下载nginx和openssl:

1
2
3
4
5
6
7
cd /usr/local/src

wget https://nginx.org/download/nginx-1.11.6.tar.gz
tar xzf nginx-1.11.6.tar.gz wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
tar xzvf openssl-1.1.0c.tar.gz

然后,编译nginx:

1
2
3
4
5
6
7
8
9
10
11
12
13
cd nginx-1.11.6
./configure --prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--with-openssl=../openssl-1.1.0c \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module make && sudo make install # 为了方便全局执行,则创建个符号链接:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

接着,就是移植老的配置了,老的配置都可以直接使用,直接拷贝过来即可。
最后,启用HTTP2 – 目前HTTP2只能和ssl(https)一起使用,只要修改下listen语句即可:

1
2
3
4
# 老的配置:
# listen 443;
# 新的配置(启用http2):
listen 443 ssl http2;

别忘了重启nginx (sudo nginx -s reload).

尝试通过HTTP2访问

搞定nginx后,随手拿个chrome就可以使用HTTP2了 – chrome 49及以上版本都支持HTTP2,还好chrome会自动升级,基本不用担心chrome太老。

打开F12查看下HTTP头部,果然Request Headers都不一样了:

这些:authority:method 和 :path 等冒号打头的就是HTTP2的特征之一 – 手边没有抓包工具,只能这样粗浅的判断了。

看看HTTP2的流水:

再比比HTTP1.1的流水:

HTTP2的流水简洁多了,有没有!

性能PK

HTTP2的性能一般应该比HTTP1.1的高一些,但是,可不一定哟:

上图是本博客首页在相同nginx、相同PC、相同网络条件下对HTTP2和HTTP1.1分别测试的PK结果。 可见虽然HTTP2的网络加载时间(Load)比HTTP1.1要短,但是DOM渲染时间(DOMContentLoaded)却比HTTP1.1要长。。。

可能是由于本博没有专门为HTTP2优化所至。也可能是浏览器渲染没有为HTTP2优化的缘故。

最后总结一句:HTTP2入坑要谨慎。

HTTP2试用小记的更多相关文章

  1. Ext.Slider的试用小记

    最近需要做一个滑动条,动态改变地图动画播放的速度.实在没有自己用js写一个的那个水平,于是找到了Ext.Slider,ExtJS的版本是3.3.0. new Ext.Slider({ id: 'pla ...

  2. 转:Raspberry Pi(树莓派)试用小记

    近期入手一树莓派卡片机,体验了一下它的强大,写篇报告,推广一下哈! 机器截图: 基础参数: CPU:700 MHz, ARM11 内存:512M(还有一种是256M的) 支持GPU加速(高清视频无压力 ...

  3. Raspberry Pi上手

    2013-05-21 买的树莓派终于到手了,嘿嘿.我在官方代理ICKEY买的,是英国版,B型. 上手教程可以根据Getting Started with Raspberry Pi(网上有电子版免费下载 ...

  4. 在zend studio 9.* 中使用phpunit进行单元测试

    单元测试在用PHP开发大型项目时必备的减少测试难度和提高测试效率的利器,而PHPUnit是php做单元测试时使用范围最广的一个.如果在window系统中开发,就要调用控制台来运行phpunit,非常的 ...

  5. 【CFD之道】2017年原创文章汇总

    1 Fluent案例(21篇) [Fluent案例]01 空气流经障碍物 [Fluent案例]02:Tesla阀 [Fluent案例]03:RAE2822翼型外流场计算 [Fluent案例]04:多孔 ...

  6. 【CFD之道】2018年原创文章汇总

    以下是公众号CFD之道2018年的全部原创文章,共计210篇. 1 Fluent验证案例[60篇] Fluent验证案例02:通过均匀热通量管道层流流动 Fluent验证案例03:管道中湍流流动压降计 ...

  7. 开源的PaaS平台

    原文地址:https://blog.csdn.net/mypods/article/details/9366465 1.Stackato Stackato 是一个应用平台,用来创建私有.安全和灵活的企 ...

  8. 在OpenShift上托管web.py应用

    一.背景 最近在学习web.py,跟随官网的cookbook和code examples一路敲敲打打,在本地访问了无数遍http://0.0.0.0:8080/,也算是对web.py有了基本的认识.为 ...

  9. nginx http2 push 试用

    nginx 已经很早就支持http2,今天证书过期,重新申请了一个,同时测试下http2 的push 功能 环境准备 证书 这个结合自己的实际去申请,我使用免费的letsencrypt,支持泛域名证书 ...

随机推荐

  1. 《开源安全运维平台:OSSIM最佳实践》内容简介

    <开源安全运维平台:OSSIM最佳实践 > 李晨光 著 清华大学出版社出版 内 容 简 介在传统的异构网络环境中,运维人员往往利用各种复杂的监管工具来管理网络,由于缺乏一种集成安全运维平台 ...

  2. dos命名重启或关闭远程服务器

    1.建议远程连接.(把远程机器IP换成实际IP地址,把密码改为administrator的真实密码) net use \\远程机器IP\ipc$ "密码"/user:adminis ...

  3. gulp入门教程

    第1步:安装Node 首先,最基本也最重要的是,我们需要搭建node环境.访问 nodejs.org,下载完成后直接运行程序,就一切准备就绪.npm会随着安装包一起安装,稍后会用到它. 为了确保Nod ...

  4. 转载:《TypeScript 中文入门教程》

    缘由 事情是这样的,我想搜索 TypeScript 中文教程,结果在 https://www.baidu.com , https://cn.bing.com ,上都找不到官方的翻译,也没有一个像样的翻 ...

  5. 关于display:inline-block和float:left的区别

    <div class="pag"> <a href="#">首页</a> <a href="#"& ...

  6. SQL Server数据库脚本备份与还原

    use[master]go /*完整--备份* backup 备份 * disk='E:\USERDB.bak' 磁盘,备份文件存放的路径* name='user' 备份显示的文件名称,可随意修改* ...

  7. TabActivity 切换Activity界面

    TAB切换先上图,tab标题没有添加样式,因为setIndicator可以直接接收View,所以可以自己编辑样式: 也可以实现OnTabChangeListener监听tab的点击,改变tab点击后的 ...

  8. Asp.net页面引用SAP IQ 16 iAnywhere.Data.SQLAnywhere.V4.0.dll报错,语言文件没找到

    参考http://sqlanywhere-forum.sap.com/questions/20420/saconnection-threw-an-exception-cannot-find-the-l ...

  9. Java集合类学习笔记(各种Map实现类的性能分析)

    HashMap和Hashtable的实现机制几乎一样,但由于Hashtable是一个古老的.线程安全的集合,因此HashMap通常比Hashtable要快. TreeMap比HashMap和Hasht ...

  10. Android中的Keyevent

    使用Adb shell command直接送key event給Android adb shell input keyevent 7 # for key '0' adb shell input key ...