【微服务部署】04-ForwardedHeaders

文章目录

    • 1. ForwardedHeaders
      • 1.1 场景
      • 1.2 关键的HTTP头
      • 1.3 核心处理要点

1. ForwardedHeaders

1.1 场景

  • 获取用户IP
  • 获取用户请求的原始URL

1.2 关键的HTTP头

  • X-Forwarded-For
  • X-Forwarded-Proto
  • X-Forwarded-Host

1.3 核心处理要点

  • 设置PathBase
  • 设置ForwardedHeaders中间件
  • 设置受信任的网关或代理的IP段
public void ConfigureServices(IServiceCollection services)
{
	...
	 services.Configure(options =>
     {
     	// 默认情况下ForwardedHeadersOptions有默认的设置和代理,这里要清除掉
          options.KnownNetworks.Clear();
          options.KnownProxies.Clear();
          options.ForwardedHeaders = ForwardedHeaders.All;// 允许输出所有类型头
      });
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	if (Configuration.GetValue("USE_PathBase", false))
    {
           app.Use((context, next) =>
           {
               context.Request.PathBase = new PathString("/mobile");
               return next();
           });
     }

	if (Configuration.GetValue("USE_Forwarded_Headers", false))
    {
         app.UseForwardedHeaders();
     }
     // 通过上述两段代码就可以使应用程序正确感知到用户的原始响应,默认情况下应用程序是没有开启这两段设置的
}


// 控制器测试
[HttpGet]
public IActionResult ShowRequestUri()
 {
     return Content(Request.GetDisplayUrl());
 }

 [HttpGet]
 public IActionResult ShowHeaders()
 {
     var sb = new System.Text.StringBuilder();
     foreach (var item in Request.Headers)
     {
         sb.AppendLine($"{item.Key}:{item.Value}");
     }

     return Content(sb.ToString());
 }

UseForwardedHeaders 作用是将当前的请求X-Forwarded-Header应用到HTTP Context上,作用是是应用程序在组装当前的请求地址时使用到正确的地址

通过以上设置,应用程序输出真实的请求地址,网关中不需要设置

你可能感兴趣的:(微服务,微服务,架构,c#)