日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Yarp实现内网http穿透

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Yarp实现内网http穿透 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Yarp介紹

YARP是微軟開源的用來代理服務器的反向代理組件,可實現的功能類似于nginx。
基于YARP,開發者可以非常快速的開發一個性能不錯的小nginx,用于代理http(s)請求到上游的http(s)服務。

http穿透原理

同網現象

在http反向代理里,代理服務器總是上游服務的http客戶端,為了網絡性能,實際上上游服務總是和代理服務處在同一個局域網。試問一個問題:在公網的小nginx,如何把請求代理到局域網的http服務器?你會發現,小nginx做不到,因為小nginx所在公網服務器,無法直接與局域網的http服務器進行通信。

http穿透

在tcp里,進行連接時總是由客戶端發起,但當連接之后客戶端與服務端是平等的,他們之間可以雙向收發數據。只要公網小nginx與局域網的http服務器存在tcp連接,我們可以使用這個連接做為httpClient的連接層,然后小nginx使用這個httpClient請求到局域網http服務器,而從達到http穿透效果。

完整流程

基于Yarp的http穿透

main連接

我們可以使用websocket協議,創建main連接,主要有以下好處:

  • 共享代理服務器監聽的http(s)端口

  • 利用websocket的ping-pong實現連接檢測

  • 利用websocket連接請求頭進行身份認證

接收局域網創建的連接

我們可以為kestrel編寫中間件,用獲取獲取局域網主動創建的tcp連接,這些連接與代理服務器與瀏覽器之間的連接共享同一個服務器端口,以下的listen.Use(transportService.OnConnectedAsync);是一個kestrel中間件。

public static IWebHostBuilder UseKestrelTransportChannel(this IWebHostBuilder hostBuilder) {return hostBuilder.UseKestrel(kestrel =>{var transportService = kestrel.ApplicationServices.GetRequiredService<TransportChannelService>();var options = kestrel.ApplicationServices.GetRequiredService<IOptions<HttpMouseOptions>>().Value;var http = options.Listen.Http;if (http != null){kestrel.Listen(http.IPAddress, http.Port, listen =>{listen.Use(transportService.OnConnectedAsync);});}var https = options.Listen.Https;if (https != null && File.Exists(https.Certificate.Path)){kestrel.Listen(https.IPAddress, https.Port, listen =>{listen.Protocols = HttpProtocols.Http1AndHttp2;listen.UseHttps(https.Certificate.Path, https.Certificate.Password);listen.Use(transportService.OnConnectedAsync);});}}); }

綁定連接到HttpClient

Yarp進行代理時,需要指定HttpMessageInvoker,HttpMessageInvoker實際是SocketsHttpHandler的包裝。而SocketsHttpHandler可以設置ConnectCallback屬性,用于指定連接。

private static HttpMessageInvoker CreateHttpClient(TransportChannelService transportChannelService) {return new HttpMessageInvoker(new SocketsHttpHandler(){UseProxy = false,UseCookies = false,AllowAutoRedirect = false,AutomaticDecompression = DecompressionMethods.None,ConnectCallback = transportChannelService.CreateChannelAsync,SslOptions = new SslClientAuthenticationOptions{RemoteCertificateValidationCallback = delegate { return true; }}}); }

Yarp直接轉發

使用直接轉發中間件

/// <summary> /// 配置中間件 /// </summary> /// <param name="app"></param> /// <param name="connectionService"></param> /// <param name="httpForwarderService"></param> public void Configure(IApplicationBuilder app, IHostEnvironment hostEnvironment, ConnectionService connectionService, HttpForwarderService httpForwarderService) { app.UseWebSockets();app.Use(connectionService.OnConnectedAsync);app.Use(httpForwarderService.SendAsync); }

通過請求的域名,找到局域網要轉發的最終服務器地址,做為yarp的請求地址。

/// <summary> /// 發送http數據 /// </summary> /// <param name="httpContext"></param> /// <returns></returns> public async Task SendAsync(HttpContext httpContext, Func<Task> next) {var clientDomain = httpContext.Request.Host.Host;if (this.connectionService.TryGetClientUpStream(clientDomain, out var clientUpstream)){var destPrefix = clientUpstream.ToString();if (this.options.CurrentValue.HttpRequest.TryGetValue(clientDomain, out var requestConfig) == false){requestConfig = this.defaultRequestConfig;}await this.httpForwarder.SendAsync(httpContext, destPrefix, httpClient, requestConfig, this.transformer);} }

總結

基于kestrel和SocketsHttpHandler高度可定制化的擴展能力,結合Yarp組件,我們可以很方便的開發一個支持內網http穿透的公網http反向代理服務器。如果把泛域名指向公網反向代理服務器,最終實現一個二級域名綁定流量到一個局域網http服務器的一對多功能。

相關文章

  • YARP實現Dapr服務調用的反向代理

  • 用YARP當網關

  • 小試YARP

總結

以上是生活随笔為你收集整理的基于Yarp实现内网http穿透的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品久久久久久久久久久aⅴ | 国产aⅴ爽av久久久久成人 | 91天堂素人 | 小泽玛利亚一区二区三区 | 免费在线成人av | 一级黄色片免费播放 | 亚洲精品日日夜夜 | 亚洲最大福利网 | 日韩激情免费 | 亚洲免费视频一区 | 日本色偷偷 | 久久综合导航 | 国产亚洲视频在线 | 毛茸茸多毛bbb毛多视频 | 999超碰| 99re这里都是精品 | 高清久久久 | 久久久久久久久久久网 | 欧美性猛交99久久久久99按摩 | 亚洲成人福利在线 | 毛片网站免费观看 | 国产夜色精品一区二区av | 污免费在线观看 | 亚洲综合色一区 | 国产区在线| 天堂av手机版 | 人人爱人人看 | aaa色| 二级毛片在线观看 | 欧美成人午夜视频 | 人妻中文字幕一区 | 三上悠亚三级 | 97精品视频在线 | 国产一区免费视频 | 国产视频一区二区在线播放 | 青青草国产在线视频 | 美女被草 | 精品一区二区三区在线视频 | 欧美老肥妇做爰bbww | 一级特黄a大片免费 | 91久久久久一区二区 | www.xxx亚洲| 91网视频 | 97神马影院 | 天堂在线观看视频 | 最近中文字幕在线观看视频 | 狠狠操亚洲 | 色原网 | 91免费在线看 | 一个色综合久久 | 亚洲国产欧美一区二区三区深喉 | 人妻在线日韩免费视频 | 带aaa级的网名 | 91入囗| 潮喷失禁大喷水无码 | 日本色www | 国产精品成人网站 | 少妇高潮一区二区三区99小说 | 十八禁毛片| 欧美国产成人在线 | 中文一区二区在线 | 国产色视频网站 | 成人综合一区二区 | 99无码熟妇丰满人妻啪啪 | 色妞网站 | 欧美一级视频免费观看 | 国产午夜在线播放 | 日韩一区二区久久 | 69网址 | 在线中文字幕播放 | 少妇一晚三次一区二区三区 | 五月婷婷激情视频 | 中文字幕在线视频精品 | 欧美午夜精品一区二区 | 四虎新网站 | 中文亚洲av片在线观看 | 91黄色免费网站 | 国产成人免费在线视频 | 国产主播一区二区三区 | 波多野结衣不卡视频 | 秋霞久久精品 | 少妇特殊按摩高潮惨叫无码 | 国产午夜精品福利视频 | 精品视频免费看 | 国产h视频| 前任攻略在线观看免费完整版 | 欧美黑人性受xxxx精品 | 无码乱人伦一区二区亚洲 | 国产手机在线 | 少妇高潮av| 成人性做爰aaa片免费看不忠 | 国产欧美视频一区二区 | 青青视频免费 | 亚洲综合视频在线播放 | 台湾佬美性中文网 | 大粗鳮巴久久久久久久久 | 午夜视频91 | 夜夜嗨一区二区 | 超碰日日干|