东方通web默认配置坑-无法获取xff

东方通web默认配置坑-无法获取xff

问题现象

东方通war服务部署后,通过nginx-->ingress模式访问出现 https与http混淆请求,浏览器报错:

location /airedo2 {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Scheme  $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true; 

        # 代理到上游服务
        proxy_pass http://ingress;
    }
已阻止加载混合活动内容"http://xxx.com/airedo2/resources/js/common/jsutil.js"

image-20260324111549756

于是乎修改为通过nginx-->k8s的ip+端口模式访问依旧出现 https与http混淆请求拦截!

location /airedo2 {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Scheme  $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true; 

        # 代理到上游服务
        proxy_pass http://10.202.17.4:31090;
    }

问题分析

1. 混合内容(Mixed Content)问题原理

  • 用户通过 HTTPS 访问:https://xxx.com/airedo2
  • Nginx 代理到后端服务:http://10.202.17.4:31090(HTTP 协议)
  • 后端 JSP 使用 request.getScheme() 构建资源 URL
  • 由于后端接收到的是 HTTP 请求,生成的资源链接是 http:// 开头
  • 浏览器安全策略:HTTPS 页面不允许加载 HTTP 资源 → 报错

2. 排查过程

2.1 检查 JSP 代码

查看 src/main/webapp/WEB-INF/views/commons/taglibs.jsp

<c:set var="ctx" value="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}"/>

image-20260324110722677

问题:pageContext.request.scheme 返回的是 http 而不是 https

2.2 检查 Nginx 配置

Nginx 已经正确传递了转发头部:

proxy_set_header X-Forwarded-Proto $scheme;  # 传递原始协议(https)
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;

2.3 检查应用代码

搜索代码中是否有处理 X-Forwarded-* 头部的逻辑:

# 搜索 Filter 或 Interceptor
grep -r "X-Forwarded-Proto" src/
grep -r "RemoteIpFilter" src/

结果:没有任何代码处理这些头部!

2.4 检查 TongWeb 配置

查看 tongweb.xml 配置文件:

<security XForwardedFor="false" ...>

找到根本原因: TongWeb 的 XFF(X-Forwarded-For)功能默认是关闭的!

通过查看手册 TongWeb V8.0安全加固手册.pdf 确认:

image-20260324110542240

3. 问题根因

Java Servlet 的 request.getScheme() 方法默认不会读取 X-Forwarded-Proto 头部!

它只返回直接连接的协议(Nginx 到后端的 HTTP),而不会自动识别 Nginx 传递的转发头部。

TongWeb 虽然支持通过配置读取这些头部,但默认是关闭的(XForwardedFor="false"),导致:
– Nginx 传了 X-Forwarded-Proto: https
– 但 TongWeb 不读取这个头部
request.getScheme() 仍然返回 http
– JSP 生成的 URL 都是 http:// 开头

解决方案

修改 TongWeb 配置

tongweb.xml 配置文件中启用 X-Forwarded-* 头部支持:

<!-- 修改这里:启用 X-Forwarded-* 头部支持 -->
<security XForwardedFor="true" 
          protocolHeader="X-Forwarded-Proto"
          hostHeader=""
          portHeader=""
          allowReferer="" 
          denyReferer="" 
          enableCrawlerSessionManager="false"
          filterRemoteAddr="false" 
          filterRemoteHost="false" 
          filterTime="false" 
          filterTimeBegin="0"
          filterTimeEnd="24" 
          rejectSystemExit="false" 
          repeat=""/>

关键参数说明:

参数 说明
XForwardedFor true 启用 X-Forwarded-* 头部解析功能
protocolHeader X-Forwarded-Proto 从这个头部读取协议信息(http/https),这是核心配置
hostHeader "" 留空表示不覆盖主机名,使用标准 Host 头部
portHeader "" 留空表示根据协议自动判断端口(http=80, https=443)

为什么 hostHeader 和 portHeader 可以留空?

  1. Nginx 已经通过 proxy_set_header Host $http_host; 传递了正确的 Host 头部
  2. TongWeb 会从标准的 Host 头部读取主机名,无需额外配置
  3. 端口会根据 protocolHeader 自动判断(https 默认 443)

总结

这个问题的本质是:
1. 错误认知:以为 Nginx 传了头部,后端就能自动获取
2. 正确理解:需要应用服务器配置才能读取转发头部
3. 解决方法:启用 TongWeb 的 XForwardedFor 功能

记住: 东方通 TongWeb 默认不读取 X-Forwarded-* 头部,必须显式配置 XForwardedFor="true"protocolHeader="X-Forwarded-Proto"

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇