NGINX Plus 现在完全支持 HTTP/2

早些时候,我们发布了支持 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 的最佳体验。

要支持 HTTP/2 仅需通过可选的 nginx‑plus‑http2 软件包。nginx‑plus 和 nginx‑plus‑extras 软件包支持 SPDY 协议,目前推荐用于生产站点,因为其被大多数浏览器所支持并且代码也是相当成熟了。

为什么要使用 HTTP/2?

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 各项性能会有提升,加密和解密过程的性能损失就减少了。

要了解更多关于 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 请求到该网站的加密版本。


  1. server {
  2. listen 80;
  3. location / {
  4. return 301 https://$host$request_uri;
  5. }
  6. }

启用 HTTP/2

要启用对 HTTP/2 的支持,只需将 http2 参数添加到所有的 listen 指令中,也要包括 SSL 参数,因为浏览器不支持不加密的 HTTP/2 请求。


  1. server {
  2. listen 443 ssl http2 default_server;
  3. ssl_certificate server.crt;
  4. ssl_certificate_key server.key;
  5. }

如果有必要,重启 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 而无法正常工作。详细内容请参阅 section 9.2.2 of the HTTP/2 RFC

特别感谢

NGINX 公司要感谢 Dropbox 和 Automattic,他们是我们软件的重度使用者,并帮助我们实现 HTTP/2。他们的贡献帮助我们加速完成这个软件,我们希望你也能支持他们。

本文来自合作伙伴“Linux中国”,原文发布日期:2015-10-08

时间: 2024-10-25 07:55:57

NGINX Plus 现在完全支持 HTTP/2的相关文章

Nginx下让WordPress支持固定链接的伪静态规则_nginx

Nginx下让WordPress支持固定链接的伪静态规则 要让nginx支持wordpress固定链接非常简单,需要自己进行添加点配置代码: 复制代码 代码如下: location / {if (-f $request_filename/index.html){                rewrite (.*) $1/index.html break;        }if (-f $request_filename/index.php){                rewrite (

nginx+thinkphp下解决不支持pathinfo模式_php技巧

nginx环境问题弄了两天,发现网上很多人的帖子要么复制粘贴,要么就是没有结贴,还自己写一句"哈哈,我自己解决了"之类的,这点我就鄙视这些发帖的同胞了,你说你问题问了,问题解决了也不给个解释.还在搜索的前几页,想没想过需要答案的人的感受呢.满心欢喜的去看答案,发现没有结贴.好吧,不多说,进入正题. 我这种方式是不需要将URL_Model改为rewrite/兼容的: 大约第43行,按照下面的对照自己的code进行修改,请注意细节的符号: location / { root C:/Zend

nginx 配置 ssl 模块支持 https

SSL英文名为Secure Socket Layer,安全套接字层.SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输 在这之前,记得nginx编译安装时加参数–with-http_ssl_module,使得nginx支持ssl模块. 一.颁发证书 下面自行颁发不受浏览器信任的证书 cd /usr/local/nginx/conf/key 1.创建服务器私钥,并输入口令 openssl genrsa -de

Nginx配置编写时支持逻辑运算与大小写字母转换的方法_nginx

逻辑运算nginx的配置中不支持if条件的逻辑与&& 逻辑或|| 运算 ,而且不支持if的嵌套语法,否则会报下面的错误:nginx: [emerg] invalid condition. 我们可以用变量的方式来间接实现. 要实现的语句: if ($arg_unitid = 42012 && $uri ~/thumb/){ echo "www.jb51.net"; } 如果按照这样来配置,就会报nginx: [emerg] invalid conditio

Nginx(Tengine)启用 SPDY 支持的配置方法_nginx

关于SPDY是什么,可以查看极客公园的这篇文章 SPDY 是什么?如何部署 SPDY 虽然SPDY当前还并不是一个标准协议,但是Google Chrome,Chromium,Mozilla Firefox,Opera,IE11均已支持SPDY协议.SPDY可以缩短网页的加载时间,让你们网页更快的展现在用户面前,仅从这个方面来说,就有部署SPDY的必要. SPDY强制使用 SSL 传输协议,就这要求我们必须拥有SSL证书.互联网不乏免费的午餐,我们可以使用StartSSL免费一年的SSL证书. 然

为Nginx添加mp4流媒体支持_nginx

这两天做视频的东西发现nginx没有mp4的视频流模块,今天我就自己添加了一下,因为之前是编译好的,所以我就直接添加了! 下载 复制代码 代码如下:  #下载解压  wget wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz  tar zxf nginx_mod*.tar.gz 配置添加 复制代码 代码如下: #查看编译参数 /usr/local/nginx/sbin/nginx -V #进

nginx中configure脚本支持的常用选项,拍摄自《Nginx高性能Web服务器详解》

Nginx支持PHP配置

Nginx本身是不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用.FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket).为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket.当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口

在nginx中配置pathinfo模式支持thinkphp的URL重写_nginx

最近一个项目中使用了ThinkPHP做为开发框架,URL上我们使用了PATHINFO模式,但是Nginx默认是不支持PATHINFO的,需要进行手动配置才可以,于是我们按照了以下方法进行了Nginx的PATHINFO支持配置:修改nginx.conf,找到server中的 location ~ .php${},修改为location ~ .php {},并在其中增加以下内容: 复制代码 代码如下: set $path_info "";set $real_script_name $fas