首页 > 服务器 > 服务器环境 > CentOS升级OpenSSL以支持Nginx Http2
2016
06-26

CentOS升级OpenSSL以支持Nginx Http2

最近将我的 Nginx 升级到了1.10,发现添加 http2 配置之后还是无法启用 http2 支持。理论上 Nginx 从1.9.5开始就全面支持 http2 了,然后我在官方看到了一句话:

Note that accepting HTTP/2 connections over TLS requires the “Application-Layer Protocol Negotiation” (ALPN) TLS extension support, which is available only since OpenSSL version 1.0.2. Using the “Next Protocol Negotiation” (NPN) TLS extension for this purpose (available since OpenSSL version 1.0.1) is not guaranteed.

大意就是 Http2 需要扩展支持,可以用的有 ALPN 和 NPN 两种(遗憾的是 Chrome 已经移除了对 NPN 的支持),为了使用 ALPN 需要将 OpenSSL 升级到 1.0.2 以上版本。

我先试了试 yum update openssl 发现不管用,只能手动编译了,然后去 Google 找了一些教程开工。

升级 OpenSSL

1.首先安装依耐环境:

2.看一下当前的 OpenSSL 版本:

3.下载 OpenSSL 的最新版,当前最新版为 1.0.2h:

4.为 OpenSSL 打补丁以支持对移动端比较友好的 Chacha 20 加密方式:

首先到这里下载补丁文件:cloudflare ssl patches

5.编译安装:

注意:如果服务器环境为 CentOS 6,由于默认 gcc 版本为 4.4.7,在添加 Chacha 20 补丁之后,编译会报错:#11,需要将 gcc 升级到 4.8 以上版本:

6.检查安装:

编译 Nginx

1.下载最新稳定版源码:

2.打补丁:nginx__dynamic_tls_records.patch

3.下载 nginx-ct 附加模块:

4.开始编译 Nginx (这里直接用的官方的编译参数):

5.添加服务脚本:

写入如下内容:

6.设置开机启动:

最后可以测试看看:用 Chrome 打开网站之后,然后打开 chrome://net-internals/#http2,可以看到 h2 已经启用了。

参考:

  1. OpenSSL-1.0.2g
  2. How to Install gcc 4.7.x/4.8.x on CentOS
  3. Jerry Qu – 本博客 Nginx 配置之完整篇
最后编辑:
作者:
百度ID:“度娘程序员”,博主。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

CentOS升级OpenSSL以支持Nginx Http2》有 4 条评论

  1. Sogou ExplorerSogou ExplorerWindows 10 x64Windows 10 x64

    博主,为什么打补丁提示以下错误呢!
    openssl版本:1.0.2l
    patch: **** Only garbage was found in the patch input.

  2. Pingback 引用通告: LNMP1.2下nginx部署http2 | 王灿昆的博客

  3. Google Chrome 51.0.2704.103Google Chrome 51.0.2704.103Windows 10 x64Windows 10 x64

    如果是lnmp系统的话,openssl的编译参数是:

    nginx的编译参数最后要加上解压openssl的目录,不然make会报错: ./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_v2_module –with-http_gzip_static_module –with-ipv6 –with-http_sub_module –with-openssl=/root/temp/openssl-1.0.2h

    两个都安装完nginx后进入/usr/local/nginx/conf/vhost/虚拟主机.conf里面,在listen里面改成listen 443 ssl http2 default_server 再重启nginx就行,和博主的不太一样

    • Google Chrome 53.0.2785.21Google Chrome 53.0.2785.21Windows 10 x64Windows 10 x64

      加ssl的目录是对的,我编译的时候也加了的,但是考虑到有些服务器不用加也能过,我就没加上参数。

发表回复

你的邮箱地址不会被公开,垃圾评论将被删除。

有人回复时邮件通知我