【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。
相关文章:
【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 指令即可…...
webpack项目工程初始化
一、初始化项目 默认系统已经安装node //初始化 pnpm init//安装webpack pnpm i -D webpack webpack-cli 新建一个index.html的入口文件 新建一个src文件存放js代码,src里面新建一个index.js package.josn配置打包命令 {"name": "webpack-cs&q…...
08-学成在线项目中统一异常处理的规范
项目中的异常处理 规范异常类型 在Service类的业务方法中有很多的参数合法性校验,当请求参数不合法的时候会抛出异常,但此时异常信息只会在控制台输出,前端界面并不会提示用户 实际开发中前端和后端需要做一些约定: 一般将错误提示信息统一以json格式返回给前端,以HTTP状态码…...
解析生效探测方法
linux dig命令 1.最常用的查询命令 dig baidu.com2 . 根据记录类型进行查询,比如MX,CNAME,NS,PTR等,只需将类型加在命令后面即可。 dig a.shifen.com ns3 . 指定域名DNS服务器测试解析是否生效的命令,以…...
【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷11
单选题 1、在阅读文章和接受信息时注意区分事实和观点十分重要。事实(或称为命题)不同于观点的一个主要特征是 A、可以被证实或证伪 B、是准确无误的 C、是正式的表达 D、表达了个人看法 答案:A 2、现代意义的知识产权是在多数国家都受…...
视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...
Spring Boot + MyBatis-Plus实现数据库读写分离
文章目录 1. 引言2. MyBatis-Plus简介3. 准备工作4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类和Mapper接口7. 编写Service8. 控制器层9. 测试10. 数据库读写分离的原理11. 拓展11.1. 动态数据源11.2. 多数据源事务管理11.3. 多租户支持 12. 总结 🎉Spring Boot …...
数据同步异常处理,数据同步重试机制(Java)
一、应用场景 在数据同步时,偶尔会出现代码异常之外的问题。例如网络异常、服务器断电… 如果在以上异常片段中,原始数据库新增了一批数据,同步数据库则会丢失这部分数据 二、实现思路 为了解决以上问题,保证原始数据库操作的每…...
STM32F407-14.3.5-01捕获_比较通道
捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器), 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…...
【Python 训练营】N_12 打印菱形图案
题目 打印菱形图案 分析 先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 答案 # 方法一 for i in range(4):block **(2*i1)print({:^7}.format(block))…...
risc-v异常处理
异常与中断的关系 中断和异常都为异常,分为: 同步异常:IO,illegal, page fault,miss_aligh 等来自处理器内部的发生的异常。异步异常(中断):鼠标,键盘,Time…...
SQL注入-数据库基础/SQL语法
目录 一,数据库概述 1.1 数据库 1.2 了解 ACID 理论 1.3 识别数据库 二,SQL 语法基础 三,SQL语句实例 3.1 SQL基础语句 3.2 SQL高级语句 四,基于SQL注入理解语法/函数 4.1 语法 4.2 函数 五,目录数据库info…...
Blazor Select 实现点击一次选项触发一次后台事件
Blazor的官方案例中,Select组件只有两个事件 1、OnSelectedItemChanged 每次选项的时候改变触发,如果你点击同一个选项是不会触发后台的方法的 2、OnBeforeSelectedItemChange 我们可以用这个事件实现每次点击同一个选项都可以触发后台事件 需要注意下最…...
只会在终端使用Python运行代码?这些高级用法了解了解
大部分同学在终端使用Python可能只是简单的执行代码,但其实结合一些Python内置模块或第三方库可以实现更高级且便捷的用法,一起看看吧 插播,更多文字总结指南实用工具科技前沿动态第一时间更新在公粽号【啥都会一点的研究生】 代码Benchmar…...
图论 2023.11.27
Kruskal定义不同的优先级 P3623 [APIO2008] 免费道路 给定一个无向图,其中一些边是0,其他边为1 两个不同的点之间都应该一条且仅由一条边连接 并保持刚好K条0,求是否有解决方案 n<2e4,m<1e5 Kruskal定义不同的优先级 思路:…...
蓝桥杯day02——Fizz Buzz
1、题目 给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中: answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] &…...
socket 一个完整的不错的示例
从客户端向服务器端发送信息时,在服务器端有打印显示; 检测环境常用,备份一下 0,公共头文件代码 //config.h#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #inc…...
第10关:基数排序
任务要求参考答案问答98 任务描述相关知识 基数排序算法编程要求测试说明 任务描述 本关任务:实现基数排序算法,并将乱序数列变成升序。 相关知识 为了完成本关任务,你需要掌握:1.基数排序算法。 基数排序算法 基数排序是按…...
torch::和at:: factory function的差別
torch::和at:: factory function的差別 前言torch::autograd::THPVariable_randtorch::rand_symintat::rand_symintdemotorch命名空間at命名空間 前言 >>> import torch >>> a torch.rand(3, 4) >>> a.requires_grad False >>> a torch…...
与珎同行录-开篇-231129
与珎同行录-开篇 珎就是对陪伴并帮助我写代码的AI的昵称 能不能读懂这个绕口令问题呢? 连续的椎体的相邻椎体质心的相邻质心的质心作为当前质心所在的椎体的质心, 该质心的方向代表该椎体的上下方向 如何代码实现呢? 还是没看懂…好吧最终的算法是:...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
