【微服务部署】04-ForwardedHeaders

文章目录

    • [1. ForwardedHeaders](#1. ForwardedHeaders)
      • [1.1 场景](#1.1 场景)
      • [1.2 关键的HTTP头](#1.2 关键的HTTP头)
      • [1.3 核心处理要点](#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<ForwardedHeadersOptions>(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上,作用是是应用程序在组装当前的请求地址时使用到正确的地址

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

相关推荐
littleM2 分钟前
OpenClaw vs HermesAgent 对比分析系列
人工智能·架构·ai编程
sunneo29 分钟前
专栏B-产品心理学深度-06-说服架构
人工智能·架构·产品运营·产品经理·ai编程·ai-native
我是唐青枫36 分钟前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net
phltxy41 分钟前
Spring Cloud入门到实战:微服务架构一站式学习
spring cloud·微服务·架构
ting94520001 小时前
纳米 AI 全面解析:定义原理、技术架构、落地场景、行业变革与未来发展趋势
人工智能·架构
YJlio1 小时前
Windows Internals 读书笔记 10.3.3:Task Scheduler 架构详解
人工智能·windows·笔记·python·学习·chatgpt·架构
AI木马人1 小时前
4.人工智能实战:大模型服务如何避免被突发流量打崩?从“接口直连GPU”到“队列调度架构”的完整工程重构
人工智能·重构·架构
CDN3602 小时前
DNS 负载均衡技术架构与调度策略解析
运维·架构·负载均衡
天天进步20152 小时前
魔音漫创源码解析:架构总览:Electron 30 + React 18 + Zustand,构建桌面级影视生产工具
react.js·架构·electron
我有一颗小慧星2 小时前
如何懒加载Polyfill来避免低代码DSL体积爆炸
低代码·架构