You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于WSO2 APIM3.0.0与IS5.9.0,如何配置获取真实客户端IP?

解决WSO2 APIM 3.0.0传递客户端真实IP到后端服务的方案

我之前在使用WSO2 APIM 3.0.0搭配IS 5.9.0作为密钥管理器的场景下,也碰到过后端服务拿到的是APIM服务器IP而非客户端真实IP的问题——这是因为APIM作为反向代理转发请求时,默认会以自身IP作为请求源发给后端。下面是我验证过的可行配置步骤:

1. 配置APIM的Tomcat传输层识别真实IP

首先要让APIM正确识别客户端的真实IP(尤其是如果APIM前端还有负载均衡/反向代理的情况,即使没有也建议配置):

  • 打开<APIM_HOME>/repository/conf/tomcat/catalina-server.xml文件
  • 找到对应HTTP/HTTPS的Connector节点(通常是端口8280和8243的节点),添加或更新以下属性:
    proxyPort="80" <!-- 若用HTTPS则设为443 -->
    scheme="http" <!-- 若用HTTPS则设为https -->
    secure="false" <!-- HTTPS场景设为true -->
    enableLookups="false"
    
  • 同时在该Connector节点内添加RemoteIpValve,用来处理转发头:
    <Valve className="org.apache.catalina.valves.RemoteIpValve"
           internalProxies="127.0.0.1, 10.*.*.*, 192.168.*.*" <!-- 替换为你的内部代理/负载均衡IP段,无则保留127.0.0.1 -->
           remoteIpHeader="X-Forwarded-For"
           remoteIpProxiesHeader="X-Forwarded-By"
           protocolHeader="X-Forwarded-Proto"/>
    

2. 配置APIM网关传递真实IP头给后端

接下来要让APIM网关在转发请求时,把真实IP传递到后端服务:

  • 打开<APIM_HOME>/repository/conf/api-manager.xml文件
  • 找到<APIGateway>下的<EnableHttpForwardedHeaders>,将其值设为true:
    <EnableHttpForwardedHeaders>true</EnableHttpForwardedHeaders>
    
  • (可选)API级别强制传递:登录APIM Publisher,编辑目标API,进入Runtime Configurations -> Endpoint Configurations,在Headers区域添加自定义头X-Forwarded-For,值设为$ctx:remoteAddr——这个变量会直接取到客户端的真实IP。

3. 后端服务适配读取真实IP

最后,你的后端微服务需要从X-Forwarded-For请求头中获取真实IP,而不是直接读取请求的源IP(因为源IP此时是APIM服务器的IP)。举个例子:

  • Java服务可以用request.getHeader("X-Forwarded-For")
  • Python Flask服务可以用request.headers.get('X-Forwarded-For')

额外注意事项

  • 如果APIM前端有Nginx等负载均衡器,需要确保负载均衡器也配置了传递X-Forwarded-For、X-Forwarded-Proto等头到APIM
  • 所有配置修改完成后,必须重启WSO2 API Manager服务才能生效
  • WSO2 IS 5.9.0作为密钥管理器,这里不需要额外配置,除非你在IS层面也需要获取客户端IP,那可以参考上述Tomcat的RemoteIpValve配置逻辑

内容的提问来源于stack exchange,提问作者OisheeP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:32:34