Tengine替换Nginx作为代理服务遇到的问题

在h5的app进行网络请求struts2 (版本6.1.1)框架对外的服务

在struts2 框架的底层使用了是否是同源校验(使用了拦截器FetchMetadataInterceptor

拦截器中判断了是否是同源请求(get请求会直接放过),出现问题的是POST请求。


由上图可以看到,struts2 会从请求头中获取"Sec-Fetch-Site" 的值进行判断,使用Tengine代理struts2 框架后问题就出在这里。

使用Tengine代理服务后(此处是https的代理,http没有验证),由于安全性要求,Tengine会给请求头拼接上几个参数(Nginx 不会主动去拼接)

复制代码
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: cross-site

在struts2 的拦截器中取出sec-fetch-sit, 发现是cross-site, 且不是get请求,会直接返回403

解决方式

临时修复方法是在Tengine 的配置文件(在server 或者location 的配置属性中覆盖配置)中添加如下配置进行覆盖,把请求头中的这三个参数置空

复制代码
proxy_set_header Sec-Fetch-Dest "";
proxy_set_header Sec-Fetch-Mode "";
proxy_set_header Sec-Fetch-Site "";

到此请求能够正常访问到接口,而不被拦截器给过滤

相关推荐
数智化管理手记12 分钟前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
实心儿儿7 小时前
Linux —— 进程间关系和守护进程
linux·运维·服务器
FII工业富联科技服务7 小时前
工业设备运维如何Agentic化?拆解Factory Brain的设备运维架构
大数据·运维·人工智能·架构·制造
Dawn-bit8 小时前
Linux磁盘管理详解
linux·运维·服务器·计算机网络·云计算
RisunJan9 小时前
Linux命令-sftp(SSH 文件传输协议客户端)
linux·运维
极客先躯10 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
泡沫冰@11 小时前
上章节中文件的讲解
前端·网络·nginx
三言老师12 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
attitude.x13 小时前
Cursor+GitOps:自动化运维新姿势
运维·自动化
ChaITSimpleLove13 小时前
SimpleIdServer 6.0.4 Docker Compose 实战部署指南
运维·docker·容器·身份认证·id-server·simpleidserver