NGINX大全 第八章 HTTP/2

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大全 第十一章 容器/微服务
阅读 1497

本章重点介绍如何构建NGINX和NGINX Plus容器镜像,使容器化环境更容易工作的特性,以及在Kubernetes和OpenShift上部署镜像。

NGINX大全 第七章 安全控制
阅读 1563

在本章中,我们将通过许多不同的方式使用NGINX和NGINX Plus来保护您的Web应用程序。您可以将这些安全方法中的许多方法相互结合使用,以帮助加强安全性。

NGINX大全 第二章 高性能负载平衡
阅读 1823

我们需要一个与基础架构一样动态的负载平衡解决方案。 NGINX以多种方式满足了这一需求,例如HTTP,TCP和UDP负载平衡,我们将在本章中介绍。

NGINX大全 第十二章 高可用性部署模式
阅读 1771

本章详细介绍了如何运行多个NGINX服务器以确保负载均衡层中的高可用性的技术。

NGINX大全 第十三章 高级活动监控
阅读 1969

本章详细介绍了NGINX Plus仪表板,NGINX Plus API和开源存根状态模块的功能。

NGINX大全 第十五章 性能调优
阅读 2915

本章还介绍了连接调优,以保持连接对客户端和上游服务器的开放性,并通过调整操作系统来提供更多连接。

NGINX大全 第十六章 实用操作提示和结论
阅读 2966

在本章中,我将介绍如何确保配置文件简洁明了以及调试配置文件。

NGINX大全 第一章 基础
阅读 2090

在本章中,您将学习如何安装主要配置文件所在的NGINX以及管理命令。 您还将学习如何验证安装并向默认服务器发出请求。