WEB应用

解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题

Jager · 11月11日 · 2016年 · · · 2466次已读

昨天一个网友通过 QQ 联系我,说按照我博客之前分享的 http2 配置教程不能生效,想请我帮忙看看。

经过测试,使用谷歌浏览器访问他的测试站点,确实没有开启 http2,但他的配置和编译参数都正确的,这有点奇怪了。解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题

不过昨天太忙就没有继续帮他分析,他只好将服务器账号和密码都留言给了我。今天中午我抽空在他服务器重新编译测试了一把,才发现原来是这么一个梗!

他在编译 Nginx 之前,使用的是 yum 安装的 openssl,可能是他的 yum 源太陈旧,或者没配置 EPEL 导致 yum 安装的 openssl 版本过低!而他在编译 Nginx 的时候并没有使用--with-openssl=DIR 的选项来静态编译,所以他编出来的 Nginx 用的系统低版本的 openssl,导致谷歌访问时并不会开启 http2!

找了段专业解释如下:

Chrome 在最近的更新中放弃了对 NPN 的支持,如果想要继续在 Chrome 上支持 HTTP/2 ,则需要安装最新 1.0.2 版的 OpenSSL,并且用 1.0.2 的 OpenSSL 重新编译 Nginx。

参考资料:

新版 Chrome 下滚回 HTTP/1.1

Supporting HTTP/2 for Google Chrome Users

所以,解决方法就非常简单了,从openssl 官网下载最新源码包,然后新增如下参数重新编译即可:

--with-openssl=源码包解压目录

比如:

./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/data/openssl-1.0.2c

当然,我们也可以先更新 yum 源,比如改用 EPEL 源,使用 yum update openssl 升级后重新编译。这里我个人建议使用源码静态编译。

重新编译安装后,再利用谷歌浏览器访问如下网址:

chrome://net-internals/#http2

测试他的网站已经成功开启 http2 了:

解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题

事后突然想起,其实自己之前折腾网站的时候其实遇到过同样的问题,就因为没有记录导致重复造轮子。所以这次记录分享一下,权当是备忘吧!

30 条回应
  1. 憧憬Licoy 2016-11-12 · 11:20

    难怪我之前配置了http2,访问的时候还是http1.1的协议。

  2. 网赚 2016-11-13 · 11:14

    不错,多谢分享

  3. 励志语录 2016-11-14 · 10:17

    签到成功!签到时间:上午10:16:36,每日签到,生活更精彩哦~

  4. 松松软文代发 2016-11-14 · 10:36

    感谢博主的分享

  5. 购物街 2016-11-15 · 17:55

    谢谢分享

  6. 任务易 2016-11-16 · 15:00

    沙发~+1

  7. LOL代练 2016-11-17 · 13:57

    空间不知道支持不支持

  8. aunsen 2016-11-17 · 15:12

    Jager有没有win主机推荐的,最近有个asp.net的站要上线

    • avatar
      Jager 2016-11-17 · 16:10

      基本没有用过win的。。不好推荐。。

  9. 王贱贱 2016-11-17 · 15:40

    膜拜技术帝

  10. 返嗨啦返利网 2016-11-17 · 17:58

    博主这里都是分享干货啊

  11. 松松软文代发 2016-11-18 · 8:51

    没有用过

  12. themebetter 2016-11-18 · 9:57

    随时记录很重要。

  13. 手机蛙排名软件 2016-11-18 · 16:16

    谷歌浏览器 http1.1 还行的,不用换的

  14. 森七 2016-11-18 · 16:41

    不错的文章

  15. 小残博客 2016-11-20 · 13:38

    目前腾讯云的CDN服务不支持http2.0么. 源站配置好了 使用腾讯云的CDN后不显示了。

  16. 果核网 2016-11-20 · 16:05

    签到成功!签到时间:下午4:04:13,每日签到,生活更精彩哦~

  17. 企业咨询 2016-11-22 · 12:29

    这个分享好

  18. 母婴B2B 2016-11-22 · 13:58

    感谢博主的分享!

  19. 小哥网赚博客 2016-11-22 · 14:41

    好记性不如烂笔头

  20. 任务易 2016-11-23 · 13:30

    笑哭,没有记录重新造轮子

  21. 靠谱学生兼职网 2016-11-23 · 15:31

    https 是未来作站的趋势了吧。

  22. 胡杨老师 2016-12-2 · 18:50

    代码总是看很久依旧不会

  23. 热腾网 2016-12-3 · 22:27

    N+A环境怎么设置好。

    • avatar
      Jager 2016-12-5 · 9:25

      N+A N为最外层,本文依旧有效。

  24. Hcyc 2016-12-30 · 2:26

    SPDY Protocol Not Enabled!
    Seriously? This SSL/TLS server is using the NPN Entension to tell browsers it supports alternative protocols, but SPDY is not a protocol it supports. The server is not making SPDY an option. Since all the pieces are in place, hopefully it will be easy to enable SPDY support with this server.

    弄好了,网站没变化,进入测试的提示这个,百度的答案都不对。

  25. 小超 2017-1-19 · 13:02

    Jager博主你好,我想请教一下服务器有没有什么配置可以防止DDOS攻击,这几天连续被攻击了半个小时,已经超出了阿里云的免费防DDOS的攻击峰值了,把网站和服务器半小时内都无法打开,请问有什么防范措施吗?

  26. 小超 2017-2-20 · 19:32

    Jager博主你好,我记得2016年6月份的时候,我配置了http2.0后,发现收录变化太不稳定了,一会是1000多的收录,一会是300的收录,我有点想不通,是什么地方弄错了

  27. 破折君 2017-3-10 · 17:36

    https都没开通,你们都开始玩http2了。。

  28. abcdocker 2017-3-31 · 19:10

    文章不错,点赞!