当前位置: 首页 > article >正文

【NGINX--8】HTTP/2

1、基本配置

想要利用 HTTP/2。

在 NGINX 服务器上启用 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 默认使用的密码套件不在规范阻止列表上。TLS 的应用层协议协商(Application-Layer Protocol Negotiation)允许应用层协商在安全连接上使用哪个协议,以避免额外往返。为了测试设置是否正确,您可以在 Chrome 和 Firefox 浏览器中安装一个插件,显示站点何时使用 HTTP/2,或者在命令行上执行 nghttp 实用程序。
参考资料
HTTP/2 RFC 密码套件黑名单

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 调用。后端服务器前面的 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;

您还可以根据 gRPC URI(包括软件包、服务和方法)通过 NGINX 去路由调用到不同的后端服务。方法是使用 location 指令:

location /mypackage.service1 { 
    grpc_pass grpc://$grpc_service1;
}
location /mypackage.service2 { 
    grpc_pass grpc://$grpc_service2;
}
location / {
    root /usr/share/nginx/html; 
    index index.html index.htm;
}

该配置示例使用 location 指令在两个单独的 gRPC 服务之间路由传入的 HTTP/2 流量,并使用一个 location 提供静态内容。对 mypackage.service1 服务的方法调用被定向到变量 grpc_service1 的值,可能包含主机名或 IP 和可选端口。对 mypackage.service2 的调用被定向到变量 grpc_ser vice2 的值。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 调用请求头,设置请求超时,及设置上游(upstream)SSL/TLS 规范。当 gRPC 通过 HTTP/2 协议进行通信时,您可以配置NGINX 在同一端点上接受 gRPC 和非 gRPC Web 流量。

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 服务器推送功能,您必须像在实操指南 8.1 中所做的那样,将服务器配置为使用 HTTP/2。配置完成后,您可以指示 NGINX 使用 http2_push 指令预先推送特定文件。该指令带一个参数,即推送到客户端的文件的完整 URI 路径。如果代理应用包含名为 Link 的 HTTP 响应头,则 NGINX 也可以自动将资源推送到客户端。该 HTTP 响应能够指示 NGINX 预载指定的资源。要启用该功能,请在 NGINX 配置中添加 http2_push_preload on。


http://www.kler.cn/a/148973.html

相关文章:

  • 【LeetCode】【算法】581. 最短无序连续子数组
  • #include<string>和#include<string.h>有什么区别
  • 认识一下Unicorn
  • 软件测试:测试用例详解
  • Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
  • 关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
  • Jmeter和Testlink自动化测试框架研究与实施
  • 每日一练:简易计算器
  • PHP众筹系统源码+支持报名众筹+商品众筹+无偿众筹+市面上所有的众筹模式 附带完整的搭建教程
  • 不小心删除了短信,如何在 Android 上恢复已删除的短信
  • 【brpc学习实践八】bvar及其应用
  • Deep Image Prior
  • 配置服务器免密登录
  • 【VRTK】【VR开发】【Unity】9-瞬移
  • Flink流批一体计算(21):Flink SQL之Flink DDL
  • OpenCV快速入门【完结】:总目录——初窥计算机视觉
  • 统计元音字母c语言
  • 手把手教你如何实现List——ArrayList
  • 鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility(题目答案)
  • C#,数值计算——插值和外推,径向基函数插值(RBF_inversemultiquadric)的计算方法与源程序
  • 基于binlog实现一些业务(Binlog4j)
  • 哈希表——闭散列表
  • 分析:为什么有些pdf打开之后无法编辑?
  • JVM运行时数据区域、对象内存分配、内存溢出异常总结
  • 将kali系统放在U盘中插入电脑直接进入kali系统
  • day64 django中间件的复习使用