如何将 docker 容器中的 nginx 从 http 1.x 升级到 http 2.0?
HTTP/2(超文本传输协议第 2 版,最初命名为 HTTP 2.0),是 HTTP 协议的的第二个主要版本,使用于万维网。HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议(是 Google 开发的基于 TCP 的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。
相比较于 1.x, http 2.0 有如下几方面的改进:
- HTTP/2 采用二进制格式而非文本格式
- HTTP/2 是完全多路复用的,而非有序并阻塞的(只需一个连接即可实现并行)
- 使用报头压缩,HTTP/2 降低了开销
- HTTP/2 让服务器可以将响应主动“推送”到客户端缓存中
为了在不改变现有硬件配置,和后台架构的基础上,给网站带来性能上的提升我想将 nginx 从 1.x 升级到 2.0,要怎么做?
注: 我的 ngnix 运行在 docker 容器中。
1 个解决方案
这里说说我实现 docker nginx 1.x 升级到 http 2.0 的步骤:
第一步,我 pull 的 Nginx 版本是 alpine:
大家应该有注意到我镜像的前缀带有 docker.io, 因为我使用了 DaoCloud 镜像加速,具体配置查看 https://www.exception.site/question/52
查看我已经处于运行状态的 nginx container 中 nginx 的版本:
运行命令:
docker exec -it nginx nginx -V
得到:
[root@iZbp1j8y1bab0djl9gdp33Z docker]# docker exec -it nginx nginx -V
nginx version: nginx/1.13.12
built by gcc 6.4.0 (Alpine 6.4.0)
built with OpenSSL 1.0.2o 27 Mar 2018
TLS SNI support enabled
可以看到我的 OpenSSL 的版本是 1.0.2, 刚好满足最低版本要求,如果你的 OpenSSL 不满足,还需要单独安装,如何安装,这里就不详细介绍了,为了不那么麻烦,推荐你和下载的镜像版本一致。
确定好前提满足后,我们需要修改配置文件,打开我们运行 nginx 容器时,挂载的配置文件目录中的配置文件,添加如下配置:
listen 443 ssl http2;
如图:
然后,重启 nginx 容器:
docker restart nginx
查看请求日志 access.log, 确认是否更改为 http 2.0:
大功告成!