目录

Welcome to YARP - 1.认识YARP并搭建反向代理服务

Welcome to YARP - 2.配置功能

Welcome to YARP - 3.负载均衡

Welcome to YARP - 4.限流

Welcome to YARP - 5.身份验证和授权

Welcome to YARP - 6.压缩、缓存

Welcome to YARP - 7.目标健康检查

Welcome to YARP - 8.分布式跟踪

目前规划了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 并构建反向代理服务的更多相关文章

  1. YARP实现Dapr服务调用的反向代理

    楔子 公司即将新开项目,打算用点时髦的技术,需要探探路.之前没做过微服务项目,没有技术栈方面的积(负)累(债), 干脆就上微软的分布式运行时Dapr......嗯......用来服务发现,然后等测试用 ...

  2. 解决异地服务器接口访问跨域,node构建反向代理

    跨域对于前端来说是一个老大难的问题,许多方法如jsonp.document.domain + iframe...都有或多或少的问题,一个最佳实践就是通过服务器nginx做反向代理,但奈何不懂相关知识, ...

  3. 【译】Introducing YARP Preview 1

    1 YARP YARP是一个项目,用于创建反向代理服务器.它开始于我们注意到来自微软内部团队的一系列问题.他们要么为其服务构建反向代理,要么询问 API 和用于构建 API 的技术.因此我们决定让他们 ...

  4. YARP+AgileConfig 5分钟实现一个支持配置热更新的代理网关

    YARP 是微软开源的一个反向代理项目,英文名叫 Yet Another Reverse Proxy .所谓反向代理最有名的那就是 nginx 了,没错 YARP 也可以用来完成 nginx 的大部分 ...

  5. C# 开源一个基于 yarp 的 API 网关 Demo,支持绑定 Kubernetes Service

    关于 Neting 刚开始的时候是打算使用微软官方的 Yarp 库,实现一个 API 网关,后面发现坑比较多,弄起来比较麻烦,就放弃了.目前写完了查看 Kubernetes Service 信息.创建 ...

  6. SLR,语法分析表的构建

    太累了,感觉不会再爱了.执行了跟编译原理上的一模一样的例子,输出了正确结果 #include <stdio.h> #include <malloc.h> #include &l ...

  7. .net core下简单构建高可用服务集群

    一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...

  8. Nginx-Cluster 构建

    nx-Cluster and ReverseProxyServer-----------ReProxy-------------------------Client-----------192.168 ...

  9. 构建squid代理服务器

    基本概念 本文使用squid代理服务 软件介绍:百度百科 作为应用层的代理服务软件,Squid主要提供缓存加速.应用层过滤控制的功能: 工作机制:缓存网页对象,减少重复请求(HTTP代理的缓存加速对象 ...

  10. Nginx+lamp构建动静分离项目

    一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...

随机推荐

  1. delphi的bpl、dcp 、dcu

    BPL  英文全称 Borland Package library ,是一种特殊的DLL文件,用于代码重用和减少可执行文件.编译bpl时,仅需要添加相应功能的pas文件,如果有窗体,则需要添加dfm文 ...

  2. Centos7部署django+uwsgi+nginx 转载: https://www.cnblogs.com/wztshine/p/16172154.html

    Centos7部署django+uwsgi+nginx   Django + uwsgi + nginx on Centos7 wsgi 介绍 本小节来自 廖雪峰 wsgi 一文 一个Web应用的本质 ...

  3. Python xpath语法与 lxml 模块

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. XML 实例文档 我们将在下面的例子中使用这个 ...

  4. Python树与树算法

    Python树与树算法 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>=1)个有限节点组成一个具 ...

  5. 【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏

    1 前言 ​ 1)场景切换 ​ 场景切换可以使用 SceneManager 的 LoadScene 和 LoadSceneAsync 方法,如下: public static void LoadSce ...

  6. Dota2参议院

    Dota2参议院 Dota2的世界里有两个阵营:Radiant天辉和Dire夜魇 Dota2参议院由来自两派的参议员组成.现在参议院希望对一个Dota2游戏里的改变作出决定.他们以一个基于轮转过程的投 ...

  7. SPA单页应用的优缺点

    SPA单页应用的优缺点 Single Page Web Application是一种特殊的Web应用,其所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML.JavaScrip ...

  8. itsdangerous模块的使用

    简介 生成临时身份令牌(通过邮件让用户注册激活的时候地址当中带有用户的信息.但是信息一般都是敏感信息,而且还想让它具有时效性,所以就可以选择itsdangerous模块 官网:https://itsd ...

  9. NSSRound#17 Basic web

    NSSRound#17 Basic web 真签到 审题 一个登录界面 看到页面名字Robots? 转到robots.txt 看到加密 知识点: 加密解密. 解题 hint解密,使用Hex加密方式解出 ...

  10. DataGear 制作支持表单交互和多图表联动的数据可视化看板

    对于数据可视化,有时需要根据用户输入的查询条件展示限定范围的数据图表,DataGear的看板表单功能可以快速方便地实现此类需求. 下面的看板示例,包含一个柱状图.一个饼图和一个地图,用户可以通过看板表 ...