【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.mzph.cn/news/179848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python面经【6】

Python面经【6】 一、什么是Python的自省机制二、关于Python程序的运行方面,有什么手段可以提升性能三、dict的item()和iteritems()的不同四、说明一个os.path和sys.path分别代表什么五、说一下字典和json的区别六、什么是可变、不可变类型 一、什么是Python的自省机…

探究Kafka原理-7.exactly once semantics 和 性能测试

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

python基于YOLOv8全系列模型【n/s/m/l/x】开发构建不同参数量级的钢铁产业产品智能自动化检测识别系统

在前文的项目开发实践中,我们已经以钢铁产业产品缺陷检测数据场景为基准,陆续开发构建了多款目标检测模型,感兴趣的话可以自行阅读即可。 《YOLOv3老矣尚能战否?基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统&#xf…

数据分析工具比较:Excel vs Python vs R

写在开头 在数据分析的世界里,选择合适的工具至关重要。本篇博客将深入比较常用的数据分析工具,包括Excel、Python和R,以帮助读者更好地选择适合自己需求的工具。 1.Excel:经典易用的电子表格 优势: 用户友好: Excel是大多数人熟悉的电子表格工具,使用简单,无需编程…

STM32之模数转换器ADC

目录 1、ADC介绍 1.什么是ADC? ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器 2.ADC的性能指标 3.ADC特性 12位分辨率 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 9.模拟看门狗 实验:使用ADC读…

Linux文件随机抽取N行并取json的某个字段

Linux文件随机抽取N行 shuf -n100 filename jq进行json处理 1) jq是一个出色的命令行针对-->JSON处理器,提供了用于查询、操作和使用JSON文件的大量功能,而且作为一个命令行工具,可配合UNIX管道使用,单行脚本处理JSON 2) jq可以对json数据进行分片、过滤、映射、转换;和se…

fastjson 1.2.24 反序列化导致任意命令执行漏洞

漏洞描述 fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。 通过查找代码中相关的方法,即可构造出一些恶意利用链。 参考资料: 浅谈Fastjson RCE漏洞的绕过史 - FreeB…

解决Hadoop DataNode ‘Incompatible clusterIDs‘报错

问题 启动hadoop时报错Failed to add storage directory 2023-11-26 12:02:06,840 WARN common.Storage: Failed to add storage directory [DISK]file:xxx java.io.IOException: Incompatible clusterIDs in xxx/dfs/data: namenode clusterID CID-xxxxxx; datanode cluste…

Postgresql数据库运维统计信息

如果需要使用以下运维信息,需要如下几步 修改postgresql.conf文件 #shared_preload_libraries # (change requires restart)shared_preload_libraries pg_stat_statements重启数据库创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;1. 统计信息…

ArrayList与顺序表的简单理解

前言----list 在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable也是一个接口,表示实现该接口的类是可以逐个元素进…

using meta-SQL 使用元SQL

%DatePart Syntax %DatePart(DTTM_Column) Description The %DatePart meta-SQL variable returns the date portion of the specified DateTime column. DatePart meta-SQL变量返回指定的DateTime列的日期部分。 Note: This meta-SQL variable is not implemented for COBOL. …

鸿蒙4.0开发笔记之ArkTS语法基础@Entry@Component自定义组件的使用(九)

文章目录 一、自定义组件概述1、什么是自定义组件2、自定义组件的优点 二、创建自定义组件1、自定义组件的结构2、自定义组件要点3、成员变量的创建4、参数传递规则 三、练习案例 一、自定义组件概述 1、什么是自定义组件 在ArkUI中,UI显示的内容均为组件&#xf…

git设置超时设置

遇到大型时项目,git可能超时,可以通过设置超时时间解决 http.timeout 设置超时时间,单位为秒。 git config --global http.timeout 30http.postBuffer 除了设置超时时间外,还可以设置缓存区,大型项目去要更多的缓存…

毫米波雷达DOA角度计算-----MUSIC算法

MUSIC算法如下: txNum :发射天线 2个 ,rxNum:接收天线 4 个 。 ant : 为目标点的 天线 接收数据 , 为 8*1矩阵。 A ant;d 0.5;M 1; % # 快拍数ang_ax -90:90; % 角度坐标% 接收信号方向向量for k1:…

【Java学习笔记】73 - 正则表达式

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter27/src/com/yinhai/regexp 一、引入正则表达式 1.提取文章中所有的英文单词 2.提取文章中所有的数字 3.提取文章中所有的英文单词和数字 4.提取百度热榜标题 正则表达式是处理文本的利器…

C语言——输入两个正整数 m 和 n。求其最大公约数和最小公倍数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int m, n;int i;int x 1;int y 0;printf("请输入两个正整数m和n&#xff1a;\n");scanf("%d,%d", &m, &n);for (i 1; i < m && i < n; i) {if (m % i 0 …

Java程序连接 nacos集群

我们在bootstrap.yml文件里可以直接连一个nacos集群的. 架构如下 没错,我们程序直连的是通过Nginx的,利用nginx的反向代理来做到连接nacos集群. 我们先把nginx的配置贴上来 upstream cluster{server 127.0.0.1:8848;server 127.0.0.1:8849;server 127.0.0.1:8850; }server{l…

软著项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

算法通关村第十三关|白银|数字与数学高频问题

1.实现加法专题 1.1 数组实现整数加法 public int[] plusOne(int[] digits) {int len digits.length;for (int i len - 1; i > 0; i--) {digits[i];digits[i] % 10;if (digits[i] ! 0) {return digits;}}digits new int[len 1];digits[0] 1;return digits; }1.2 字符…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…