日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

.Net反向代理組件Yarp用法詳解

瀏覽:391日期:2022-06-08 17:08:04
目錄
  • 簡介
  • 基礎(chǔ)使用
    • 1、創(chuàng)建 ASP.NET Core 空項目
    • 2、 修改代碼 Program.cs 文件
    • 3、修改配置文件 appsettings.json
    • 4、啟動項目
    • 5、問題整理
  • 進(jìn)階探索
    • 1、多地址代理
    • 2、規(guī)則匹配
    • 3、問題整理
  • 小試牛刀
    • 踩坑集錦
      • 1、non-ASCII

    簡介

    Yarp 是微軟團(tuán)隊開發(fā)的一個反向代理組件, 除了常規(guī)的 http 和 https 轉(zhuǎn)換通訊,它最大的特點是可定制化,很容易根據(jù)特定場景開發(fā)出需要的定制代理通道。

    詳細(xì)介紹:https://devblogs.microsoft.com/dotnet/announcing-yarp-1-0-release

    源碼倉庫:https://github.com/microsoft/reverse-proxy

    文檔地址 :https://microsoft.github.io/reverse-proxy/

    基礎(chǔ)使用

    1、創(chuàng)建 ASP.NET Core 空項目

    使用 Visual Studio :

    使用 .NET CLI 命令行創(chuàng)建:

    dotnet new web -o MyProxy

    2、 修改代碼 Program.cs 文件

    var builder = WebApplication.CreateBuilder(args);builder.Services.AddReverseProxy()    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));var app = builder.Build();app.MapGet("/Ping", () => "Hello World!");app.MapReverseProxy();app.Run();

    3、修改配置文件 appsettings.json

    {  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft.AspNetCore": "Warning"    }  },  "AllowedHosts": "*",  "ReverseProxy": {    "Routes": {      "routeAll": {"ClusterId": "clusterBaidu","Match": {  "Path": "{**catch-all}"}      }    },    "Clusters": {      "clusterBaidu": {"Destinations": {  "baidu": {    "Address": "https://www.baidu.com/"  }}      }    }  }}

    這里的配置是將所有的請求都轉(zhuǎn)發(fā)到百度。

    在 Program.cs 里,還注冊了一個 Get 路由 Ping 。

    4、啟動項目

    能夠看到在瀏覽器訪問程序監(jiān)聽的端口號后,顯示的是百度的頁面。打開 F12 ,看到請求頭也是本地的,并不是百度的域名。

    測試手動注冊的路由 Ping :

    能夠顯示正常。

    5、問題整理

    • (1) Yarp 是不是只能做這種簡單的轉(zhuǎn)發(fā)?

    不是,往下有配置文件說明。

    • (2) JSON 配置文件里有什么要注意的地方嗎?

    有。在這個演示的配置文件中 ReverseProxy:Clusters:cluster1:Destinations:destination1:Address 對應(yīng)的值是:https://www.baidu.com/ ,如果去掉 www ,在項目啟動后會跳轉(zhuǎn)到百度首頁,不是代理轉(zhuǎn)發(fā)。去掉末尾的 / 符合沒有任何影響。

    • (3) Yarp 會影響到程序中注冊的路由嗎?

    不會影響到程序內(nèi)部注冊的路由。在 Program.cs 中無論 app.MapReverseProxy(); 在上還是在下,在訪問 Ping 的時候,都是返回 Hello World!

    var app = builder.Build();app.MapReverseProxy();app.MapGet("/Ping", () => "Hello World!");app.Run();

    進(jìn)階探索

    1、多地址代理

    修改配置文件 appsettings.json ,實現(xiàn)默認(rèn)路由跳轉(zhuǎn)百度,當(dāng)訪問 /movie 是訪問 b站。

    {  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft.AspNetCore": "Warning"    }  },  "AllowedHosts": "*",  "ReverseProxy": {    "Routes": {      "routeBaidu": {"ClusterId": "clusterBaidu","Match": {  "Path": "{**catch-all}"}      },      "routeBiliBili": {"ClusterId": "clusterBiliBili","Match": {  "Path": "/movie/{**catch-all}"}      }    },    "Clusters": {      "clusterBaidu": {"Destinations": {  "baidu": {    "Address": "https://www.baidu.com/"  }}      },      "clusterBiliBili": {"Destinations": {  "bilibili": {    "Address": "https://www.bilibili.com/"  }}      }    }  }}

    測試結(jié)果:

    在后面輸入路由 /movie 后能夠跳轉(zhuǎn)到b站。但是b站網(wǎng)頁沒有完整顯示,圖片都沒有,這是網(wǎng)站上的策略問題,對于數(shù)據(jù)接口沒有這些問題。

    詳細(xì)的配置文件說明,可以查看 https://microsoft.github.io/reverse-proxy/articles/config-files.html

    2、規(guī)則匹配

    網(wǎng)頁上太多資源,為了方便測試,啟用兩個 api 接口。地址分別是:http://localhost:5241/ 和 https://localhost:7184/

    兩個 api 接口中分別注冊 /test 路由。

    // http://localhost:5241/app.MapGet("/test", () => "Welcome to Api111!");// https://localhost:7184/app.MapGet("/test", () => "Welcome to Api222!");

    啟動兩個 api 程序。

    C:\Users\Test>curl http://localhost:5241/testWelcome to Api111!C:\Users\Test>curl https://localhost:7184/testWelcome to Api222!

    修改 MyProxy 項目的配置文件 appsettings.json

    {  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft.AspNetCore": "Warning"    }  },  "AllowedHosts": "*",  "ReverseProxy": {    "Routes": {      "routeOne": {"ClusterId": "clusterOne","Match": {  "Path": "/test/{**catch-all}",  "QueryParameters": [    {      "Name": "number",      "Values": [ "1" ]    }  ]}      },      "routeTwo": {"ClusterId": "clusterTwo","Match": {  "Path": "/test/{**catch-all}",  "QueryParameters": [    {      "Name": "number",      "Values": [ "2" ]    }  ]}      },      "routeBaidu": {"ClusterId": "clusterBaidu","Match": {  "Path": "{**catch-all}"}      }    },    "Clusters": {      "clusterOne": {"Destinations": {  "apiOne": {    "Address": "http://localhost:5241/"  }}      },      "clusterTwo": {"Destinations": {  "apiTwo": {    "Address": "https://localhost:7184/"  }}      },      "clusterBaidu": {"Destinations": {  "baidu": {    "Address": "https://www.baidu.com/"  }}      }    }  }}
    • Path :監(jiān)聽路由地址。
    • QueryParameters:匹配參數(shù)。
    • QueryParameters:Name:參數(shù)名。
    • QueryParameters:Values:參數(shù)值。

    MyProxy 的監(jiān)聽端口是 http://localhost:5024/ 訪問結(jié)果如下:

    C:\Users\Test>curl http://localhost:5024/pingHello World!C:\Users\Test>curl http://localhost:5024/test<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /test was not found on this server.</p></body></html>C:\Users\Test>curl http://localhost:5024/test?number=1Welcome to Api111!C:\Users\Test>curl http://localhost:5024/test?number=2Welcome to Api222!

    能夠根據(jù)參數(shù)以及參數(shù)值導(dǎo)向?qū)?yīng)的地址。

    3、問題整理

    • (1)為什么訪問 /movie 不能正常顯示網(wǎng)頁。

    因為 b站某些接口開啟了防盜鏈,還有跨域檢測。

    • (2)在根據(jù)參數(shù)匹配中,如果匹配的路由一樣,監(jiān)聽的參數(shù)一樣,參數(shù)值也一樣會怎么樣?

    訪問該路由地址會報錯。

    • (3)路由匹配的優(yōu)先級?

    程序內(nèi)注冊的路由優(yōu)先級最高,其次才是 Yarp 在配置文件里加載的。

    小試牛刀

    最近的工作是做企業(yè)內(nèi)數(shù)據(jù)安全方面的。推動公司數(shù)據(jù)安全體系,通過技術(shù)手段提升公司信息安全。

    有一個很老的OA系統(tǒng),十幾年了, .NET Framework 2.0 寫的。漏洞一大堆,包括不限于xss、sql注入等,權(quán)限只到表單級別。瀏覽器上按下 F12 能查看到表單鏈接,直接復(fù)制出去,別人也能訪問。

    在這個系統(tǒng)上要做安全,我想的是在中間加代理,正好適合使用 Yarp 來完成,也方便寫業(yè)務(wù)處理代碼。嗯,很真實, .NET Core 寫的,方便寫業(yè)務(wù)代碼。

    用戶登錄成功后,會記錄下用戶的 Host 和 Cookie,每次訪問的時候系統(tǒng)的時候,在 Yarp 這里都校驗一下是否與用戶登錄時的匹配。

    解決了兩個問題:

    1、從網(wǎng)絡(luò)層捕獲到所有的請求,方便后面做排查。參數(shù)、傳值,出了事故可以找到責(zé)任人。

    2、隔離真實的站點地址,杜絕弱安全等級網(wǎng)站暴露后被壞人攻擊的風(fēng)險。

    踩坑集錦

    1、non-ASCII

    項目要代理某網(wǎng)頁,在使用下載功能的時候,接口返回 502 。

    info: Yarp.ReverseProxy.Forwarder.HttpForwarder[48]      ResponseHeaders: The destination returned a response that cannot be proxied back to the client.      System.InvalidOperationException: Invalid non-ASCII or control character in header: 0x00E4 at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpHeaders.ThrowInvalidHeaderCharacter(Char ch) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpHeaders.ValidateHeaderValueCharacters(StringValues headerValues) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpResponseHeaders.SetValueFast(String key, StringValues value) at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpHeaders.Microsoft.AspNetCore.Http.IHeaderDictionary.set_Item(String key, StringValues value) at Yarp.ReverseProxy.Forwarder.HttpTransformer.CopyResponseHeaders(HttpHeaders source, IHeaderDictionary destination) at Yarp.ReverseProxy.Forwarder.HttpTransformer.TransformResponseAsync(HttpContext httpContext, HttpResponseMessage proxyResponse) at Yarp.ReverseProxy.Transforms.Builder.StructuredTransformer.TransformResponseAsync(HttpContext httpContext, HttpResponseMessage proxyResponse) at Yarp.ReverseProxy.Forwarder.HttpForwarder.SendAsync(HttpContext context, String destinationPrefix, HttpMessageInvoker httpClient, ForwarderRequestConfig requestConfig, HttpTransformer transformer)

    去 GitHub 翻 Issues

    下載接口能正常訪問,文件流也能完整地拿到。重寫了所有的響應(yīng)頭沒有用。這種不開源的商業(yè)站點,也猜不到字符編碼。

    最后妥協(xié)了,用了一個 .NET 服務(wù)在服務(wù)器上下載后再轉(zhuǎn)發(fā)。

    代理非常規(guī)服務(wù)接口時,一定要多測試。

    以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

    標(biāo)簽: ASP.NET
    相關(guān)文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    国产一区二区三区成人欧美日韩在线观看 | 欧美另类中文字幕 | 国产乱论精品| 国产a久久精品一区二区三区| 亚洲伊人影院| 黄色av日韩| 久久在线视频免费观看| 精品久久免费| 国产精品久久久久久久久久久久久久久 | 午夜久久av| 日韩中文字幕一区二区三区| 国产精品亚洲一区二区三区在线观看| 青青草视频一区| 亚洲精品人人| 亚洲最大av| 免费日韩av片| 精品资源在线| 免费在线观看一区| 国产精品一区二区av日韩在线| 亚洲精品美女91| 蜜臀av一区二区三区| 视频在线在亚洲| 视频一区二区不卡| 亚洲久久视频| 日韩久久一区| 国产情侣久久| 国产精品视频一区二区三区 | 亚洲精品电影| 五月天久久777| 美女久久久久| 亚洲欧美日韩国产一区二区| 亚洲免费婷婷| 亚州精品视频| 欧美午夜三级| 麻豆免费精品视频| 首页国产精品| 久久婷婷亚洲| 国产色综合网| 五月天激情综合网| 男女男精品网站| 日韩有码av| 国产欧美日韩精品一区二区免费 | 国产精品成人自拍| 精品免费视频| 国产综合色区在线观看| 亚洲午夜黄色| 好看不卡的中文字幕| 中国女人久久久| 国产亚洲欧洲| 免费久久精品视频| 777久久精品| 精品一区av| 婷婷激情图片久久| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩中文字幕一区二区高清99| 欧美一区91| 在线看片国产福利你懂的| 欧美99久久| 丝袜国产日韩另类美女| 欧美日韩中出| 久久精品免费看| 久久精品青草| 久久亚洲不卡| 国产精品99久久免费| 中文在线免费视频| 亚洲激情二区| 欧美日韩在线精品一区二区三区激情综合| 国产精选久久| 免费在线小视频| 六月丁香综合| 美女国产一区二区三区| 性欧美xxxx免费岛国不卡电影| 午夜视频精品| 国产情侣久久| 日韩精品久久久久久久电影99爱| 另类亚洲自拍| 久久亚洲黄色| 99xxxx成人网| 日本成人在线网站| 日本精品不卡| 日韩中出av| 欧美三级精品| 日韩一二三区在线观看| 久久麻豆视频| 国产亚洲精品自拍| 欧美91在线| 精品在线播放| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩成人精品一区| 欧美在线影院| 国产精品久久久久久久久久齐齐 | 欧美日韩一区二区三区视频播放| 亚洲一区久久| 国产精品综合| 狠狠久久婷婷| 国产午夜久久av| 国产专区一区| 欧美黑人巨大videos精品| 精品欧美激情在线观看| 日本在线一区二区三区| 色婷婷狠狠五月综合天色拍| 日韩精彩视频在线观看| 欧美日韩国产传媒| 欧美国产免费| 综合亚洲视频| 久久久久久久久久久妇女| 亚洲人成高清| 久久影视一区| 精品国产不卡一区二区| 蜜桃av一区二区在线观看| 国产欧美日韩在线一区二区| 久久国产中文字幕| 国产日韩欧美三级| 蜜桃久久精品一区二区| 特黄毛片在线观看| 免费日韩一区二区三区| 欧美日韩国产一区精品一区| 国产精品综合| 视频在线观看一区二区三区| 999国产精品永久免费视频app| 日本aⅴ精品一区二区三区| 亚洲一区日韩| 精品捆绑调教一区二区三区 | 久久亚洲欧洲| 在线亚洲国产精品网站| 欧美日韩国产在线一区| 亚洲激情中文| 老色鬼久久亚洲一区二区| 一二三区精品| 91精品丝袜国产高跟在线| 国产亚洲字幕| 国产精品蜜月aⅴ在线| 国产精品国码视频| 久久三级毛片| 日韩欧美看国产| 欧美a级一区| 免费观看在线综合色| 91精品在线免费视频| 久久国产精品色av免费看| 国产精品久久久久久久久久白浆 | 9999国产精品| 久久久一本精品| 国产一区日韩一区| 亚洲视频播放| 亚洲aa在线| 国产精品丝袜在线播放| 日本一二区不卡| 欧美精品一二| 日本三级亚洲精品| 国产一区二区三区久久| 精品在线91| 综合激情一区| 国产精品久久| 日韩欧美一区二区三区在线视频 | 老司机久久99久久精品播放免费| 亚洲精品影视| 久久永久免费| 99成人超碰| 中文字幕日本一区| 鲁大师精品99久久久| 精品视频国内| 亚州av乱码久久精品蜜桃| 亚洲ww精品| 鲁鲁在线中文| 免费日本视频一区| 久久免费影院| 不卡中文字幕| 国产日韩一区二区三区在线播放| 91青青国产在线观看精品| 9国产精品视频| 国产欧美高清| 国产高清一区| 国产精品亚洲片在线播放| 麻豆精品蜜桃| 欧美亚洲tv| 日韩一区二区三区在线免费观看| 亚洲免费毛片| 肉色欧美久久久久久久免费看 | 亚洲人成在线影院| 国产一区二区三区黄网站| 99在线观看免费视频精品观看| 国产麻豆精品久久| 婷婷色综合网| 久久的色偷偷| 欧美一区=区| 成人在线视频中文字幕| 久久大逼视频| 98精品久久久久久久| 免播放器亚洲| 91亚洲人成网污www| 亚洲精品麻豆| 亚洲香蕉网站| 欧美激情视频一区二区三区免费| 黄色亚洲免费| 国产一区二区三区久久| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩啪啪电影网| 日韩欧美久久| 亚洲二区精品| 精品精品久久|