修复循环代理的问题

This commit is contained in:
xljiulang 2021-07-14 01:16:20 +08:00
parent e2bd4dac50
commit e060dbe57b
3 changed files with 24 additions and 9 deletions

View File

@ -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);

View File

@ -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;

View File

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