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

【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.lryc.cn/news/247230.html

相关文章:

  • webpack项目工程初始化
  • 08-学成在线项目中统一异常处理的规范
  • 解析生效探测方法
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷11
  • 视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?
  • Spring Boot + MyBatis-Plus实现数据库读写分离
  • 数据同步异常处理,数据同步重试机制(Java)
  • STM32F407-14.3.5-01捕获_比较通道
  • 【Python 训练营】N_12 打印菱形图案
  • risc-v异常处理
  • SQL注入-数据库基础/SQL语法
  • Blazor Select 实现点击一次选项触发一次后台事件
  • 只会在终端使用Python运行代码?这些高级用法了解了解
  • 图论 2023.11.27
  • 蓝桥杯day02——Fizz Buzz
  • socket 一个完整的不错的示例
  • 第10关:基数排序
  • torch::和at:: factory function的差別
  • 与珎同行录-开篇-231129
  • linux logrotate日志轮询设置案例一
  • Android 12.0 禁用adb reboot recovery命令实现正常重启功能
  • 使用Jmeter进行http接口测试
  • Linux内存管理(六十三):ION 内存管理器——cma heap
  • 条形码格式
  • Java通过Redis进行延时队列,定时发布消息(根据用户选择时间进行发布)
  • 从 0 搭建 Vite 3 + Vue 3 Js版 前端工程化项目
  • 【论文阅读笔记】Smil: Multimodal learning with severely missing modality
  • 在Windows系统上安装git-Git的过程记录
  • qt QString常用方法
  • 吴恩达《机器学习》10-6-10-7:学习曲线、决定下一步做什么