【问题标题】:Preserve Client IP address in Azure API Management with Application Gateway scenario使用应用程序网关方案在 Azure API 管理中保留客户端 IP 地址
【发布时间】:2020-03-13 22:20:12
【问题描述】:

我在此设置中配置了 Azure 应用程序网关API 管理 https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-integrate-internal-vnet-appgateway - 应用程序网关是公共端点,只有定义的路由会传递到 API 管理。

我想使用ip-filter 策略来限制对某些 IP 地址的调用。但是,当通过应用程序网关进行呼叫时,原始客户端 IP 地址会丢失或被混淆为 IP 0.0.0.0

有没有办法保留原始客户端 IP 地址并将其从应用程序网关传递到 API 管理?

【问题讨论】:

    标签: azure-api-management azure-application-gateway


    【解决方案1】:

    您可能会发现这篇文章很有用:https://docs.microsoft.com/en-us/azure/application-gateway/how-application-gateway-works#modifications-to-the-request

    应用程序网关向所有请求插入四个附加标头 在将请求转发到后端之前。这些标题是 x-forwarded-for、x-forwarded-proto、x-forwarded-port 和 x-原始主机。 x-forwarded-for 标头的格式是 逗号分隔的 IP:port 列表。

    【讨论】:

    • 你是对的。我已经检查了 HTTP 标头 x-forwarded-for - 它允许使用此策略表达式 docs.microsoft.com/en-us/azure/api-management/… 实现一些自己的块逻辑作为后备。
    • 我检查过,对我来说这个解决方案不起作用,因为 Request-X-Forwarded-For HTTP 标头包含不同的端口信息,这使得无法过滤定义的 IP 地址集。此解决方案中建议的其他标题不包含过滤所需的信息。
    • 好的,如果我在检查之前减少标题值,它会起作用:@{字符串 headerValue = context.Request.Headers.GetValueOrDefault("x-forwarded-for",""); string[] tokens = headerValue.Split(':'); if(tokens.Length == 2) { headerValue = tokens[0]; } 返回标头值; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2020-06-10
    • 2021-09-14
    • 2014-02-21
    相关资源
    最近更新 更多