NGINX大全 第八章 HTTP/2
第八章 HTTP/2
8.0 介绍
HTTP/2是HTTP协议的一个主要修订版。此版本中完成的大部分工作都集中在传输层,例如通过单个TCP连接启用完整请求和响应多路复用。在HTTP头字段上采用压缩的做法获得了效率,并且添加了对请求优先级的支持。协议的另一个重要补充是服务器将消息推送到客户端的能力。本章详细介绍了在NGINX中启用HTTP/2以及配置gRPC和HTTP/2服务器推送支持的基本配置。
8.1 基本配置
问题
您想使用HTTP/2。
解决方案
在NGINX的server上开启HTTP/2:
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
}
讨论
要打开HTTP/2,只需将http2
参数添加到listen
指令即可。但问题是,尽管协议不要求将连接包裹在SSL/TLS中,但HTTP/2客户端的某些实现仅支持通过加密连接的HTTP/2。另一个需要注意的是,HTTP/2规范将许多TLS 1.2的密码套件列入黑名单,因此导致握手失败。NGINX默认使用的密码不在黑名单中。要测试您的设置是否正确,您可以为Chrome和Firefox浏览器安装一个插件,用于指示网站何时使用HTTP/2,或者在命令行中使用nghttp
实用程序。
8.2 gRPC
问题
您需要终止,检查,路由或负载平衡gRPC方法调用。
解决方案
使用NGINX代理gRPC连接。
server {
listen 80 http2;
location / {
grpc_pass grpc://backend.local:50051;
}
}
在此配置中,NGINX正在端口80上侦听未加密的HTTP/2流量,并将该流量代理到端口50051上名为backend.local
的机器。grpc_pass
指令指示NGINX将通信视为gRPC调用。我们的backend.local
服务器前面的grpc://
不是必需的; 但是,它直接表明后端通信未加密。
要在客户端和NGINX之间使用TLS加密,并在传递调用给应用程序服务器之前终止该加密,请打开SSL和HTTP/2,就像在第一部分中所做的那样:
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
grpc_pass grpc://backend.local:50051;
}
}
此配置在NGINX处终止TLS,并通过未加密的HTTP/2将gRPC通信传递给应用程序。
要配置NGINX以加密与应用服务器的gRPC通信,提供端到端的加密流量,只需修改grpc_pass
指令,在服务器信息之前指定grpcs://
(注意添加s表示安全通讯):
grpc_pass grpcs://backend.local:50051;
您还可以使用NGINX路由不同的后端服务的调用(包括包,服务和方法),根据gRPC URI。 为此,请使用location
指令。
location /mypackage.service1 {
grpc_pass grpc://backend.local:50051;
}
location /mypackage.service2 {
grpc_pass grpc://backend.local:50052;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
此配置示例使用location
指令在两个单独的gRPC服务之间路由传入的HTTP/2流量,还有一个用于提供静态内容的location
。对mypackage.service1
服务的方法调用被定向到端口50051上的backend.local
服务器,而对mypackage.service2
的调用被定向到端口50052。location /
捕获任何其他HTTP请求并提供静态内容。这演示了NGINX如何能够在相同的HTTP/2端点下为gRPC和非gRPC提供服务并相应地路由。
负载均衡gRPC调用也类似于非gRPC HTTP流量:
upstream grpcservers {
server backend1.local:50051;
server backend2.local:50051;
}
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
grpc_pass grpc://grpcservers;
}
}
upstream块对gRPC的工作方式与其他HTTP流量的工作方式完全相同。唯一的区别是upstream
是由grpc_pass
引用的。
讨论
NGINX能够接收,代理,负载平衡,路由和终止gRPC的加密调用。gRPC模块使NGINX能够设置,更改或丢弃gRPC调用header,设置请求超时,以及设置upstream SSL/TLS规范。当gRPC通过HTTP/2协议进行通信时,您可以配置NGINX使得同一端点上接收gRPC和非gRPC Web流量。
8.3 HTTP/2服务器推送
问题
您需要抢先将内容推送到客户端。
解决方案
使用NGINX的HTTP/2服务器推送的功能。
server {
listen 443 ssl http2 default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
root /usr/share/nginx/html;
location = /demo.html {
http2_push /style.css;
http2_push /image1.jpg;
}
}
讨论
要使用HTTP/2服务器推送,必须为HTTP/2配置server,如章节7.1中所述。从那里,您可以指示NGINX使用http2_push
指令抢先推送特定文件。该指令采用一个参数,即要推送到客户端的文件的完整URI路径。
如果代理应用程序包含名为Link的HTTP响应header,NGINX还可以自动将资源推送到客户端。此header能够指示NGINX预加载指定的资源。要启用此功能,请把http2_push_preload;
添加到NGINX配置中。
猜你喜欢
NGINX大全 第十一章 容器/微服务
阅读 1771本章重点介绍如何构建NGINX和NGINX Plus容器镜像,使容器化环境更容易工作的特性,以及在Kubernetes和OpenShift上部署镜像。
NGINX大全 第九章 复杂的媒体流
阅读 1867本章介绍使用MPEG-4或Flash视频格式的NGINX的流媒体。NGINX被广泛用于向大众分发和传输内容。NGINX支持行业标准格式和流技术,本章将对其进行介绍。
NGINX大全 第一章 基础
阅读 2364在本章中,您将学习如何安装主要配置文件所在的NGINX以及管理命令。 您还将学习如何验证安装并向默认服务器发出请求。
NGINX大全 第六章 验证
阅读 2150NGINX能够验证客户端。通过NGINX验证客户端请求降低了工作量,并可以阻止未经身份验证的请求到达应用程序服务器。
NGINX大全 第四章 可大规模扩展的内容缓存
阅读 4899使用NGINX,您可以在任何可以放置NGINX服务器的地方缓存您的内容,从而有效地创建您自己的CDN。
NGINX大全 第七章 安全控制
阅读 1928在本章中,我们将通过许多不同的方式使用NGINX和NGINX Plus来保护您的Web应用程序。您可以将这些安全方法中的许多方法相互结合使用,以帮助加强安全性。
NGINX大全 第三章 流量管理
阅读 2808本章介绍NGINX的基于百分比分割客户端请求,利用客户端的地理位置还有以速率,连接和带宽限制的形式控制流量的能力。
NGINX大全 第二章 高性能负载平衡
阅读 2115我们需要一个与基础架构一样动态的负载平衡解决方案。 NGINX以多种方式满足了这一需求,例如HTTP,TCP和UDP负载平衡,我们将在本章中介绍。