Forráskód Böngészése

修复循环代理的问题

xljiulang 4 éve
szülő
commit
e060dbe57b

+ 5 - 2
FastGithub.ReverseProxy/KestrelServerOptionsExtensions.cs

@@ -68,13 +68,16 @@ namespace FastGithub
         {
             return listenOptions.UseHttps(https =>
             {
-                const string defaultDomain = "github.com";
                 var certs = new ConcurrentDictionary<string, X509Certificate2>();
-                https.ServerCertificateSelector = (ctx, domain) => certs.GetOrAdd(domain ?? defaultDomain, CreateCert);
+                https.ServerCertificateSelector = (ctx, domain) => certs.GetOrAdd(domain, CreateCert);
             });
 
             X509Certificate2 CreateCert(string domain)
             {
+                if (domain == string.Empty)
+                {
+                    domain = "github.com";
+                }
                 var domains = new[] { domain };
                 var validFrom = DateTime.Today.AddYears(-1);
                 var validTo = DateTime.Today.AddYears(10);

+ 18 - 6
FastGithub.ReverseProxy/ReverseProxyApplicationBuilderExtensions.cs

@@ -1,6 +1,11 @@
 using FastGithub.ReverseProxy;
+using FastGithub.Scanner;
 using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using System;
+using System.Linq;
 using Yarp.ReverseProxy.Forwarder;
 
 namespace FastGithub
@@ -19,15 +24,22 @@ namespace FastGithub
         {
             var httpForwarder = app.ApplicationServices.GetRequiredService<IHttpForwarder>();
             var httpClientFactory = app.ApplicationServices.GetRequiredService<NoneSniHttpClientFactory>();
+            var options = app.ApplicationServices.GetRequiredService<IOptionsMonitor<GithubLookupFactoryOptions>>();
 
             app.Use(next => async context =>
             {
-                var hostString = context.Request.Host;
-                var port = hostString.Port ?? 443;
-                var destinationPrefix = $"http://{hostString.Host}:{port}/";
-
-                var httpClient = httpClientFactory.CreateHttpClient();
-                await httpForwarder.SendAsync(context, destinationPrefix, httpClient);
+                var host = context.Request.Host.Host;
+                if (options.CurrentValue.Domains.Contains(host) == false)
+                {
+                    await context.Response.WriteAsJsonAsync(new { message = $"不支持以{host}访问" });
+                }
+                else
+                {
+                    var port = context.Request.Host.Port ?? 443;
+                    var destinationPrefix = $"http://{host}:{port}/";
+                    var httpClient = httpClientFactory.CreateHttpClient();
+                    await httpForwarder.SendAsync(context, destinationPrefix, httpClient);
+                }
             });
 
             return app;

+ 1 - 1
FastGithub.Scanner/GithubLookupFactoryOptions.cs

@@ -6,7 +6,7 @@ namespace FastGithub.Scanner
     /// 域名
     /// </summary>
     [Options("Lookup")]
-    sealed class GithubLookupFactoryOptions
+    public class GithubLookupFactoryOptions
     {
         /// <summary>
         /// 反查的域名