Welcome to YARP - 1.认识 YARP 并构建反向代理服务
目录
Welcome to YARP - 1.认识YARP并搭建反向代理服务
目前规划了8篇文章,但是能写多少还不确定,哈哈哈。毕竟上班才是主线,只能空闲时间去了解
介绍
YARP
是微软在.NET Core
基础架构之上实现的一个反向代理工具包,他的设计初衷是提供核心代理功能的库。
当然也有人拿它做为Gateway
来使用。不是特别复杂的网关需求,那么YARP
是完全可以胜任的。
什么是反向代理?
反向代理是一个中间层服务器,位于客户端和一个或多个后端服务器之间。它接收来自客户端的请求,然后将这些请求转发给一个或多个后端服务器,最终将后端服务器的响应返回给客户端。反向代理通常用于隐藏后端服务器的真实身份和细节,增加安全性,缓存内容,负责SSL终结等任务。
主要功能
- 反向代理
- 负载均衡
- 限流(此功能仅在使用 .NET 7.0 或更高版本时可用)
- 身份验证和授权
- 压缩、缓存
- 健康检查
- 分布式跟踪等
主要特点
- 高效、强大并具有
.NET
本身的特点:你可以在.NET
中使用YARP
快速构建一个强大、高性能的代理服务 - 稳定可靠:
YAPR
提供了主动和被动健康检查,还提供了多种问题诊断机制 - 可定制化:可以添加或者替换模块来自定义这些功能。(其最大的特点就是可定制化)
快速开始
本文演示的环境为:.NET 6 + YARP 2.0.1
注意:部分教程包括官方文档的实例代码用的都是2.0.0版本,但是2.0.0版本的YARP包官方已经报告出有严重的bug(A denial of service vulnerability exists in YARP.)拒绝服务(DOS)的漏洞。截止2023.10.25 YAPR只有两个可用的正式版本,分别是1.1.2和2.0.1。如果你的项目用的是1.x版本请升级到1.1.2,2.x版本则升级到2.0.1
1.创建项目
首先使用命令行创建一个 “空” 的ASP.NET Core
应用程序:
dotnet new web -n MyProxy -f net6.0
或者在 Visual Studio 2022 中创建新的 ASP.NET Core
Web 应用程序。
2.添加项目引用
<ItemGroup>
<PackageReference Include="Yarp.ReverseProxy" Version="2.0.1" />
</ItemGroup>
或者使用在程序包管理控制台输入一下命令
dotnet add package Yarp.ReverseProxy --version 2.0.1
3.添加 YARP 中间件
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()//添加ReverseProxy相关服务到DI
//从配置文件中加载ReverseProxy的设置
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();//使用ReverseProxy中间件
app.Run();
主要的代码就三行,已经用注释进行标注。
4.Configuration 配置
我们先用appsettings.json
文件来配置YARP
。 当然还可以以编程方式提供配置。 下篇文章我们再用另一种方式实现。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ReverseProxy": {
"Routes": {
"route1" : {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"destination1": {
"Address": "https://cn.bing.com/"
}
}
}
}
}
}
具体配置是什么涵义可以往下看,或者移步第二篇看更详尽的配置说明。
5.运行项目
在MyProxy.csproj
文件目录下使用命令行工具运行dotnet run
命令或者在VS中直接F5运行。
查看效果:
可以看到我们已经代理了必应站点,当我们访问代理服务器(http://localhost:5177)时,显示的是必应的搜索界面,客户端对必应这个站点是完全无感知的,也不会知道必应的服务地址是多少
注意:项目本身注册的路由是不受代理影响的。当你访问此路由时不会被代理。例如:app.MapGet("/hello", () => "Hello World!"); 此时你访问
http://localhost:5177/hello
会正常返回结果,不会被代理到必应的。
配置讲解
"ReverseProxy": {
"Routes": {
//描述一个路由,该路由根据匹配规则匹配传入的请求,并将匹配请求的代理到其ClusterId标识的群集。
"route1" : {
//与此路由匹配的集群标识。这里与下文的cluster1对应,如果路由匹配正确则访问cluster1配置的后端服务器地址。
"ClusterId": "cluster1",
//匹配规则 这里个正则表示匹配任何路径
"Match": {
"Path": "{**catch-all}"
}
}
},
//后端服务器集群
"Clusters": {
//集群标识
"cluster1": {
//服务器配置
"Destinations": {
//目标服务器1,可以有多个
"destination1": {
//服务器地址
"Address": "https://cn.bing.com/"
}
}
}
}
}
总结
本文介绍了YAPR
是什么及功能优点和如何快速入门YARP
。以上示例的代码已上传GitHub
,示例代码,在MyProxy
文件夹下。
下一篇将介绍YAPR
的配置功能:配置文件、Configuration Providers(可以有多种方式提供配置)、及Configuration Filters(配置过滤器)。
Welcome to YARP - 1.认识 YARP 并构建反向代理服务的更多相关文章
- YARP实现Dapr服务调用的反向代理
楔子 公司即将新开项目,打算用点时髦的技术,需要探探路.之前没做过微服务项目,没有技术栈方面的积(负)累(债), 干脆就上微软的分布式运行时Dapr......嗯......用来服务发现,然后等测试用 ...
- 解决异地服务器接口访问跨域,node构建反向代理
跨域对于前端来说是一个老大难的问题,许多方法如jsonp.document.domain + iframe...都有或多或少的问题,一个最佳实践就是通过服务器nginx做反向代理,但奈何不懂相关知识, ...
- 【译】Introducing YARP Preview 1
1 YARP YARP是一个项目,用于创建反向代理服务器.它开始于我们注意到来自微软内部团队的一系列问题.他们要么为其服务构建反向代理,要么询问 API 和用于构建 API 的技术.因此我们决定让他们 ...
- YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关
YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...
- C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service
关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关,后面发现坑比较多,弄起来比较麻烦,就放弃了.目前写完了查看 Kubernetes Service 信息.创建 ...
- SLR,语法分析表的构建
太累了,感觉不会再爱了.执行了跟编译原理上的一模一样的例子,输出了正确结果 #include <stdio.h> #include <malloc.h> #include &l ...
- .net core下简单构建高可用服务集群
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...
- Nginx-Cluster 构建
nx-Cluster and ReverseProxyServer-----------ReProxy-------------------------Client-----------192.168 ...
- 构建squid代理服务器
基本概念 本文使用squid代理服务 软件介绍:百度百科 作为应用层的代理服务软件,Squid主要提供缓存加速.应用层过滤控制的功能: 工作机制:缓存网页对象,减少重复请求(HTTP代理的缓存加速对象 ...
- Nginx+lamp构建动静分离项目
一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...
随机推荐
- 当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记
摘要 .NET Framework在过去十多年在跨平台上的尝试. .NET Core跨平台的实现有何不同? 基于 .NET Standard的平台兼容性是如何实现的? 讲师介绍 历史枷锁 .NET F ...
- burpsuit+adb+逍遥模拟器
安卓7之后,单纯的将burpsuit的证书导出手动安装到模拟器中已经不行了,app可以只信任指定证书和系统内置的证书,后续用户安装的证书是不生效的,只能想办法装到系统内部 需要将证书通过openssl ...
- JOISC 2019 记录
Day1 T1 Examination 三维数点板子题,直接 cdq分治+树状数组,时间复杂度 \(O(n\log^2n)\). Day1 T2 Meetings 对于一个大小为 \(n\) 的树,我 ...
- react 快速接入 sentry,性能监控与错误上报踩坑日记
壹 ❀ 引 本文是我入职第一个月所写,在主导基建组的这段时间也难免会与错误监控和性能监控打交道,因为公司主要考虑接入sentry,所以对于接入sentry的基建任务也提了一些需求,主要分为: 支持查看 ...
- JS Leetcode 1370. 上升下降字符串 题解分析,桶排序与charCodeAt fromCharCode妙用
壹 ❀ 引 本题来自LeetCode1370. 上升下降字符串,难度简单,是一道考察对于字符串遍历熟练度的题目,题目描述如下: 给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 ...
- renren-fast-vue@1.2.2 项目编译报错: build `gulp`
问题呈现: PS D:\Code\Java\ideaWorkspace\renren-fast-vue> npm run build > renren-fast-vue@1.2.2 bui ...
- Centos7 和 Centos8 升级内核
从yum安装kernel-ml 对于Centos7 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install htt ...
- 使用CNN实现MNIST数据集分类
1 MNIST数据集和CNN网络配置 关于MNIST数据集的说明及配置见使用TensorFlow实现MNIST数据集分类 CNN网络参数配置如下: 原始数据:输入为[28,28],输出为[1,10] ...
- PC端应用程序自动化测试——pywinauto、pywin32、pyautogui
1 前言 PC 端自动化测试使用到的 python 模块主要有 pywinauto.win32gui.pyautogui,主要功能如下: pywinauto:主要使用到 Application 类,用 ...
- Springboot AOP介绍及实战
介绍 AOP是Aspect Oriented Program的首字母缩写:这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 主要用于非核心业务处理,比如权限,日志 ...