早些时候,咱们发布了支持 HTTP/2 协议的 NGINX Plus R7。做为 HTTP 协议的最新标准,HTTP/2 的设计为如今的 web 应用程序带来了更高的性能和安全性。(LCTT 译注: 开源版本的 NGINX 1.95 也支持 HTTP/2 了。)前端
NGINX Plus 所实现的 HTTP/2 协议可与现有的网站和应用程序进行无缝衔接。只须要一点改变,无论用户选择什么样的浏览器,NGINX Plus 都能为用户同时提供 HTTP/1.x 与HTTP/2 的最佳体验。linux
要支持 HTTP/2 仅需经过可选的 nginx‑plus‑http2 软件包。nginx‑plus 和 nginx‑plus‑extras 软件包支持 SPDY 协议,目前推荐用于生产站点,由于其被大多数浏览器所支持而且代码也是至关成熟了。nginx
为何要使用 HTTP/2?web
HTTP/2 使数据传输更高效,对你的应用程序更安全。 HTTP/2 相比于 HTTP/1.x 有五个提升性能特色:算法
彻底复用 – 在一个保持激活(keepalive)的链接上,HTTP/1.1 强制按严格的顺序来处理请求。一个请求必须在下一个请求开始前结束。 HTTP/2 消除了这一要求,容许并行和乱序来处理请求。后端
单一,持久链接 – 因为 HTTP/2 容许请求彻底复用,因此能够经过单一链接并行下载网页上的全部对象。在 HTTP/1.x 中,使用多个链接来并行下载资源,从而致使使用底层 TCP 协议效率很低。浏览器
二进制编码 – Header 信息使用紧凑的二进制格式发送,而不是纯文本格式,节省了传输字节。安全
Header 压缩 – Headers 使用专用的 HPACK 压缩算法来进行压缩,这进一步下降数据经过网络传输的字节。服务器
SSL/TLS 加密 – 在 HTTP/2 中,强制使用 SSL/TLS。在 RFC 中并无强制,其容许纯文本的 HTTP/2,可是当前全部实现 HTTP/2的 Web 浏览器都只支持加密。 SSL/TLS 可使你的网站更安全,而且使用 HTTP/2 各项性能会有提高,加密和解密过程的性能损失就减小了。网络
NGINX Plus 如何实现 HTTP/2
咱们的 HTTP/2 实现是基于 SPDY 支持的,它已经被普遍部署(使用了 NGINX 或 NGINX Plus 的网站近 75% 都使用了 SPDY)。使用 NGINX Plus 部署 HTTP/2 时,几乎不会改变你应用程序的配置。本节将讨论 NGINX Plus如何实现对 HTTP/2 的支持。
一个 HTTP/2 网关
NGINX Plus 做为一个 HTTP/2 网关。它与支持 HTTP/2 的客户端 Web 浏览器用 HTTP/2 通信,而转换 HTTP/2 请求给后端服务器通讯时使用 HTTP/1.x(或者 FastCGI, SCGI, uWSGI, 等等. – 取决于你目前正在使用的协议)。
向后兼容性
在一段时间内,你须要同时支持 HTTP/2 和 HTTP/1.x。在撰写本文时,超过50%的用户使用的 Web 浏览器已经支持 HTTP/2,但这也意味着近50%的人尚未使用。
为了同时支持 HTTP/1.x 和 HTTP/2,NGINX Plus 实现了 TLS 上的 Next Protocol Negotiation (NPN)扩展。当 Web 浏览器链接到服务器时,其将所支持的协议列表发送到服务器端。若是浏览器支持的协议列表中包括 h2 - 即 HTTP/2,NGINX Plus 将使用 HTTP/2 链接到浏览器。若是浏览器不支持 NPN 或在发送支持的协议列表中没有 h2,NGINX Plus 将继续回落到 HTTP/1.x。
转向 HTTP/2
NGINX 公司会尽量帮助你们无缝过渡到使用 HTTP/2。本节介绍了经过对你应用进行改变来启用对 HTTP/2 支持,其中只需对 NGINX Plus 配置进行几个变化。
前提条件
使用 nginx‑plus‑http2 软件包升级到 NGINX Plus R7。注意如今尚未支持 HTTP/2 版本的 nginx‑plus‑extras 软件包。
重定向全部流量到 SSL/TLS
若是你的应用还没有使用 SSL/TLS 加密,如今启用它正是一个好的时机。加密你的应用程序能够保护你免受间谍以及来自其余中间人的攻击。一些搜索引擎甚至在搜索结果中对加密站点提升排名。下面的配置块重定向全部的普通 HTTP 请求到该网站的加密版本。
server {
listen 80;
location / {
return 301 https://$host$request_uri;
}
}
启用 HTTP/2
要启用对 HTTP/2 的支持,只需将 http2 参数添加到全部的 listen 指令中,也要包括 SSL 参数,由于浏览器不支持不加密的 HTTP/2 请求。
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
…
}
若是有必要,重启 NGINX Plus,例如经过运行 nginx -s reload 命令。要验证 HTTP/2 是否正常工做,你能够在 Google Chrome 和 Firefox 中使用 “HTTP/2 and SPDY indicator” 插件来检查。
注意事项
在安装 nginx‑plus‑http2 包以前, 你必须删除配置文件中全部 listen 指令后的 SPDY 参数(使用 http2 和 ssl 参数来替换它以启用对 HTTP/2 的支持)。使用这个包后,若是 listen 指令后有 spdy 参数,NGINX Plus 将没法启动。
若是你在 NGINX Plus 前端使用了 Web 应用防火墙(WAF),请确保它可以解析 HTTP/2,或者把它移到 NGINX Plus 后面。
此版本不支持在 HTTP/2 RFC 中定义的 “Server Push” 特性。 NGINX Plus 之后的版本可能会支持它。
NGINX Plus R7 同时支持 SPDY 和 HTTP/2(LCTT 译注:可是你只能同时使用其中一种)。在之后的版本中,咱们将弃用对 SPDY 的支持。谷歌在2016年初将 弃用 SPDY,所以同时支持这两种协议也非必要。
若是 ssl_prefer_server_ciphers 设置为 on 或者使用了定义在 Appendix A: TLS 1.2 Ciper Suite Black List 中的 ssl_ciphers 列表时,浏览器会出现 handshake-errors 而没法正常工做。
免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/
或者勾搭Q2430675018
欢迎加入linux交流群 478068715