首页 > 解决方案 > 如何读取 X-Forwarded-For 以确定 apache httpd 中的内部流量

问题描述

这个要求看起来很简单(但实际上并不简单),我需要在 apache httpd 配置中确定请求是从内部网络还是外部网络发起的。这样我们就可以设置自定义请求头并为外部用户传递给后端服务器,并让请求头从客户端传递给内部用户的后端服务器。我们正在使用 remoteip_module

<IFmodule remoteip_module>
 RemoteIPheader X-Forwarded-For
 RemoteIpinternalProxy 10.34.0.0/16
</ifModule>

流程是客户端 -> 负载均衡器 -> apache httpd/反向代理 -> 应用服务器

我尝试了所有我能找到的方法,但是有些 LB 如何在 X-Forwarded-For 请求标头中设置 IP 无法被 httpd 配置文件读取

这是我写入 httpd 配置文件的配置

<if "req('X-Forwarded-For') !~ /^(10\.)/ ">

 RequestHeader set X-abcd-TransactionId "%{UNIQUE_ID}e"

</if>
//else send the X-abcd-TransactionId value set by client to the application server 

假设,如果用户代理(比如说邮递员)设置 X-Forwarded-For 标头,那么 httpd 配置可以读取该标头,否则 httpd 无法读取 LB 设置的标头值.....不确定是否有任何现有配置在 httpd 中不允许它读取 LB 设置的标头。注意:我们可以在显示 clientIP 的访问日志中打印 %a 变量

问题:读取 X-Forwarded-for 并在 if 指令中使用它的语法或变量是什么

标签: apachereverse-proxyx-forwarded-for

解决方案


推荐阅读