1 YARP

YARP是一个项目,用于创建反向代理服务器。它开始于我们注意到来自微软内部团队的一系列问题。他们要么为其服务构建反向代理,要么询问 API 和用于构建 API 的技术。因此我们决定让他们聚在一起开发一个通用解决方案,该解决方案形成了YARP。

YARP是一个反向代理工具包,用于使用 ASP.NET 和 .NET 中的基础设施在 .NET 中构建代理服务器。YARP 的主要区别是,它被设计为易于自定义和调整,以满足不同方案的特定需求。YARP 插入ASP.NET管道以处理传入请求,然后它拥有自己的子管道,用于执行将请求代理到后端服务器的步骤。客户可以添加其他module,或根据需要更换常备module。

随着其开发已基本到位,我们制作了 YARP 的第一个正式版本(Preview 1),以便更好地协作并获得反馈。

2 Preview 1 是什么

    • 核心代理的基础结构
    • 基于配置的路由定义
    • 扩展性的管道模型
    • Forwarded标头(硬编码)
    • 目标 .NET Core 3.1 和 .NET Core 5

3 Preview 1 不包括

    • 会话亲和性(又称会话保持)
    • Forwarded标头(可配置)
    • 基于代码的路由定义和预请求路由
    • 指标和日志
    • 性能调整
    • 连接筛选

4 快速开始

Step 01 下载.net framework

YARP 适用于 .NET Core 3.1 或 .NET 5 Preview 4(或更高版本)。

Step 02 创建一个ASP.NET Core项目

Step 03 打开项目,添加引用,确保其包含

<PropertyGroup>
<TargetFramework>netcoreapp5.</TargetFramework>
</PropertyGroup>

  和

<ItemGroup>
<PackageReference Include="Microsoft.ReverseProxy" Version="1.0.0-preview.1.*" />
</ItemGroup>

Step 04 Startup.cs

  YARP 当前使用配置文件来定义代理的路由和终结点。在ConfigureServices方法中加载。

public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddReverseProxy()
.LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

  Configure方法定义ASP.NET的请求处理管道。反向代理插入到ASP.NET的终结点路由,然后具有其自己的代理子管道。在这里,可以添加代理管道模块(如负载均衡)来自定义请求的处理。

/// <summary>
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
/// </summary>
public void Configure(IApplicationBuilder app)
{
app.UseHttpsRedirection(); app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapReverseProxy(proxyPipeline =>
{
proxyPipeline.UseProxyLoadBalancing();
});
});
}

Step 05 配置

  YARP 的配置定义在appsettings.json中:

"ReverseProxy": {
"Routes": [
{
"RouteId": "app1",
"BackendId": "backend1",
"Match": {
"Methods": [ "GET", "POST" ],
"Host": "localhost",
"Path": "/app1/"
}
},
{
"RouteId": "route2",
"BackendId": "backend2",
"Match": {
"Host": "localhost"
}
}
],
"Backends": {
"backend1": {
"LoadBalancing": {
"Mode": "Random"
},
"Destinations": {
"backend1_destination1": {
"Address": "https://example.com:10000/"
},
"backend1_destination2": {
"Address": "http://example.com:10001/"
}
}
},
"backend2": {
"Destinations": {
"backend2_destination1": {
"Address": "https://example.com:10002/"
}
}
}
}
}
    • Backends:请求可以路由到的服务器群集。
    • Destinations:是用于指标、日志记录和会话保持的标识符。
    • Address:URL前缀(基地址)
    • Routes:根据请求的各个方面(如主机名、路径、方法、请求标头等)将传入请求映射到后端群集。路由是有序的,因此,需要首先定义 app1 路由,因为 route2 将作为尚未匹配的所有路径的 catchall。

  好啦,先介绍到这里。

原文链接

  https://devblogs.microsoft.com/dotnet/introducing-yarp-preview-1/?utm_source=vs_developer_news&utm_medium=referral

【译】Introducing YARP Preview 1的更多相关文章

  1. [译]Introducing ASP.NET vNext and MVC 6

    原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext init ...

  2. [译]Introducing ASP.NET 5

    原文:http://weblogs.asp.net/scottgu/introducing-asp-net-5 ASP.NET 5预览版发布了, 可以在这下载最新的Visual Studio 2015 ...

  3. Introducing ASP.NET vNext and MVC 6

    [译]Introducing ASP.NET vNext and MVC 6 原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source ...

  4. 【译】Introducing “Web Live Preview”

    如果你开发的应用有 UI,你可能经历开发->编译->测试->修改->编译->测试的循环.根据所使用的框架或技术,有些可以改善这一流程,比如 edit-and-contin ...

  5. 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

      .NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...

  6. 【译】.NET Core 2.2 Preview 2 发布

    原文出自.Net Blog Announcing .NET Core 2.2 Preview 2 今天,我们宣布推出.NET Core 2.2 Preview 2.我们有很多重要改进要和你分享,而且我 ...

  7. 【译】宣告推出.NET Core 3.0 Preview 7(英雄的黎明)

    今天,我们宣布推出.NET Core 3.0 Preview 7.我们已经从创建新特性阶段过渡到了完善版本阶段.对于其余的预览版,我们将把重点放在质量(改进)上. 在Windows,macOS和Lin ...

  8. 【译】Announcing Entity Framework Core 5.0 Preview 5

    今天我们宣布EF Core 5.0发布第五个预览版. 1 先决条件 EF Core 5.0 的预览版要求  .NET Standard 2.1.这意味着: EF Core 5.0 在 .NET Cor ...

  9. 【译】ASP.NET Core updates in .NET 5 Preview 8

    .NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...

随机推荐

  1. 【chrome 】退出paused in debugger模式 (原创)

    下面失效 https://blog.csdn.net/gs6511/article/details/62418422

  2. vue项目中关闭eslint的方法

    非常简单的操作方法!不用再去为了烦人的代码标准报错而苦恼了! 方法一:在项目根目录下增加 vue.config.js 文件 添加以下代码: module.exports = { lintOnSave: ...

  3. ExtJS动态隐藏Panel中按钮

    1.直接隐藏 在bbar的按钮中直接加属性:hidden : true 属性,可隐藏:disabled : true 属性,可禁用 在columns列中直接加属性:hidden : true 属性,可 ...

  4. 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx

    ↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...

  5. 13.Java连接Redis_Jedis_事务

    Jedis事务我们使用JDBC连接Mysql的时候,每次执行sql语句之前,都需要开启事务:在MyBatis中,也需要使用openSession()来获取session事务对象,来进行sql执行.查询 ...

  6. 【C++】运算符优先级和结合性

    从上表可以大致总结这样一个规律: 优先级 运算符 高 初等运算符 | 单目运算符 | 算术运算符(先乘除,后加减) | 关系运算符 | 逻辑运算符(不包括!) | 条件运算符 ↓ 赋值运算符 低 逗号 ...

  7. [wordpress使用]002_主题

    使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...

  8. [JavaWeb基础] 003.JAVA访问Mysql数据库

    上面两篇讲解了简单的JSP + Servlet的搭建和请求,那么后面我们肯定要用到数据交互,也就是操纵数据库的数据,包括对数字的增加,删除,修改,查询.我们就用简单的MySql来做例子 我们需要引入驱 ...

  9. AtomicLong AtomicDouble AtomicInteger

    Atomic+数字类型 大多都持有一个静态的Unsafe对象,通过unsafe 对属性在类对象的offset cas直接操作物理内存实现对数据的修改 public class AtomicLong e ...

  10. 【Gradle教程】Gradle 入门

    本文为我在学习群内分享时在B站直播分享时的文档,直播间地址 http://live.bilibili.com/22263819 PS:问一下,Linux下有什么好用的会议软件么? 知道的朋友烦请评论告 ...