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

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.itxdl.cn/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

时间: 2024-12-05 17:48:30

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

nginx的upstream目前支持5种方式的分配

Nginx nginx的upstream目前支持5种方式的分配 FROM: 转载 1 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器, 如果后端服务器down掉, 能自动剔除. 2 weight 指定轮询几率, weight和访问比率成正比, 用于后端服务器性能不均的情况.例如: 1 2 3 4 upstream bakend {     server 192.168.0.14 weight=10;     server 192.168.0.15 weight=10; } 3 ip_

nginx的upstream目前支持5种方式的分配(转)

nginx的upstream目前支持5种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 例如: upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3.ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问

nginx安装及配置支持php的教程(全)

本文的实验环境为:Centos4.5,nginx版本为:nginx-0.7.26 pcre-7.8.tar.gz  正则表达式下载地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/  nginx-0.7.26.tar下载地址:http://www.nginx.net/   php-5.2.6.tar.bz2下载地址:http://www.php.net/releases/  php-5.2.6-fpm-0.5.9.diff.gz p

<nginx+PHP>nginx环境下配置支持php7

[[email protected] ~]# wget http://am1.php.net/get/php-7.1.2.tar.gz/from/this/mirror [[email protected] ~]# tar xzvf php-7.1.2.tar.gz [[email protected] ~]# cd php-7.1.2/ [[email protected] ~]# ./configure--prefix=/usr/local/php --enable-fpm [[email 

夺命雷公狗---linux NO:38 linux下nginx的pathinfo的支持

我们在nginx 中使用 thinkphp   的时候会遇到很多的问题,比如: 没权限,这个就是linux  权限管理的好处,我们给他权限.. 我们给他权限即可正常访问了: 然后我们为 IndexController  控制器下添加一个lists的方法: 然后我们添加一个lists的方法,如下所示: 保存退出.对她进行访问.. 没戏...因为nginx 不支持php后面的url 那里带斜线和后面带一串的参数..所以我们要想办法让他支持pathinfo.. 不过我们先来windows下的apach

nginx低版本不支持pathinfo模式,thinkphp针对此问题的解决办法

将一个thinkphp项目从apache环境移到nginx1.2上,怎奈,nginx这个版本默认不支持pathinfo模式 首先,编辑nginx的虚拟主机配置文件 location ~ .*.(php|php5)?$ { #原有代码 } if (!-e $request_filename) {   rewrite  ^(.*)$  /index.php?s=$1  last;   break;    } #去掉$是为了不匹配行末,即可以匹配.php/,以实现pathinfo #如果你不需要用到p

修改Nginx解决ThinkPHP不支持PathInfo模式

最精简的Nginx配置 server { listen 80; server_name test.com; charset utf-8; location / { root E:/WWW/test; index index.php; if (!-e $request_filename) { #一定要用(.*)匹配整个URI,包含URI第一个字符反斜杠/ #rewrite ^(.*)$ /index.php?s=$1 last; rewrite ^/(.*)index.php(.*)$ $1/in

nginx 同一个端口同时 支持 http 和 https

遇到一个场景: 开始测试时,使用的是 88 端口,比如 www.abc.com:88 后来上线了切换到 80 端口,www.abc.com, 然后升级到 https 默认使用443端口,https://www.abc.com 但是呢,有部分老用户还是在使用 88 和 80 端口,这个好解决,就是一个 http 到 https 的 rewrite. 但是呢,有部分用户会这样访问: https://www.abc.com:88/ 协议使用的是 https 协议,但是呢 端口使用的是 88! 这样就会

nginx配置之tomcat支持多域名

nginx.conf user  www www; worker_processes  1; #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log  info; #pid        logs/nginx.pid; events {     use epoll;     worker_connections  1024; } http {     include