升级HTTP 2.0历程

21. 5 月 2017 服务器 2

最近服务器频繁受到攻击,挂了一片服务,实不相瞒1G内存小服务器随便一打就倒了,而且我又是那种懒得管的人。。趁这次重新配置了一圈,升级了一下组件,其中就包括nginx升级和http2.0的部署。

HTTP 2.0是由SPDY发展而来的,两者的设计差不多:压缩、多路复用、安全性,但是二者的实现有区别,所以不互相兼容。关于HTTP 2.0的相关技术细节有几篇博文通俗易懂,推荐一下,就不复述了:

HPACK:HTTP/2 头部压缩技术介绍  HPACK完全解析

Negotiation:HTTP/2协议协商机制

另外还有官方文档。不过我是不推荐一上来直接读官方文档的,效率会比较低,但是最后还是要读的……

 

首先要升级https。这一步是必须的,虽然官方并没有说http2需要跟https绑定,但是目前浏览器都是这么干的,所以想要在浏览器上实现http2,网站就必须是https的。

首先需要申请https证书。我看了一些知乎讨论之后尝试了两种:

  1. CheapSSLSecurity的付费版,便宜的一年3刀,限定域名的,对博客来说够用,按页面提示输入信息就可以了,下单后两天一直PENDING状态。。。怒退款。。。
  2. 阿里云的证书服务,提供了免费的DV SSL证书,是Symantec提供的(对这个公司莫名有好感?),也是填入基本信息,十分钟左右就完成了,可以直接在页面下载.pem和.key文件,准备配置服务器了。

Nginx是从1.9版本开始支持http2的,现在最新版本是1.12,但是centos仓库远没有支持到这个版本,需要编译安装。

这里有两行是比较重要的:

首先我用 --with-openssl=/root/openssl-1.1.0e 指定了openssl的源码,这是因为openssl是从1.0.2开始支持ALPN的,而chrome在51版本之后正式放弃NPN使用ALPN,如果不使用新版的openssl,会导致在chrome 51之后的版本上无法使用http2。

另外编译要加入 --with-http_v2_module  (据说默认也会编,我没试,先加上了)

安装完成后,将以前的blog.conf放回到/etc/nginx/conf.d中,blog可以正常访问了。

之后我们在/etc/nginx中新建文件夹key,并把刚才下载的.pem和.key放到这个文件夹里,新建一个blog-https.conf,设置为如下:

后半部分是wordpress官方提供的标准nginx配置,可以根据需要修改,前面是ssl配置,里面设置了超时,禁用了一些不安全的加密协议,并指定了使用http2.

 

然后重启nginx,访问https://blog.yiz96.com,就OK了。这里再推荐一个chrome插件 HTTP/2 and SPDY indicator,在访问HTTP2的页面的时候,有个蓝色小⚡️会亮起来,就很容易知道是否是通过HTTP2访问的了。

 

之后还可以通过nginx设置使原来的http流量跳转到https,将原来的blog-http.conf修改为:

301代表Permanently Moved,浏览器缓存这个包,之后都会自动跳转到https协议的。


2 thoughts on “升级HTTP 2.0历程”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据