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

Tomcat不同版本配置RemoteIpFilter后getRequestURL返回协议不一致问题

问题根因
  • Apache Tomcat 8.5.58、9.0.38版本对RemoteIpFilter做了安全加固调整:只有请求来源IP属于internalProxies参数配置的内部代理范围时,Filter才会读取x-forwarded-proto等转发头更新请求属性,否则直接忽略所有转发头。
  • Azure WebApps的前置反向代理节点的内网IP段不在Tomcat internalProxies的默认允许列表内,因此升级到对应版本后,你配置的x-forwarded-proto头不会被Filter处理:Tomcat读取到的是Azure代理到实例的原始HTTP流量,因此getRequestURL()返回http协议。你打印的请求头中存在x-forwarded-proto也验证了该头已正常传递,只是被Filter拦截未生效。
修复方案

在你现有RemoteIpFilter配置中新增internalProxies初始化参数即可,因为Azure WebApps实例默认不会对外直接暴露,所有流量都会经过官方前置代理,可直接配置为匹配所有代理IP:

<filter>
    <filter-name>RemoteIpFilter</filter-name>
    <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
    <init-param>
        <param-name>remoteIpHeader</param-name>
        <param-value>x-forwarded-for</param-value>
    </init-param>
    <init-param>
        <param-name>remoteIpProxiesHeader</param-name>
        <param-value>x-forwarded-by</param-value>
    </init-param>
    <init-param>
        <param-name>protocolHeader</param-name>
        <param-value>x-forwarded-proto</param-value>
    </init-param>
    <!-- 新增以下配置 -->
    <init-param>
        <param-name>internalProxies</param-name>
        <param-value>.*</param-value>
    </init-param>
</filter>

配置更新后重新部署应用即可生效,getRequestURL()将正常返回https协议地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:04