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 "";

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

相关推荐
志栋智能1 天前
超自动化运维如何提升安全合规水平?
运维·安全·自动化
A_humble_scholar1 天前
Linux(九) 进程管理完全指南:从入门到实战
linux·运维·chrome
江华森1 天前
Linux 操作命令完全指南
linux·运维
源图客1 天前
【AI向量数据库】Weaviate介绍与部署
运维·docker·容器
用什么都重名1 天前
Git分支合并与远程服务器同步实战:保留关键配置文件
运维·服务器·git
C++ 老炮儿的技术栈1 天前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
2301_780789661 天前
零信任架构中,身份感知防火墙(IAFW)的部署要点与最佳实践
linux·运维·服务器·人工智能·tcp/ip·架构
2401_868534781 天前
2025下半年网络规划设计师真题(选择题、案例分析)
运维·服务器·网络
Urbano1 天前
22 道工序、核心难点与自动化升级方案
运维·自动化
Urbano1 天前
工装裤与外套缝制自动化对比:真实设备选型与工艺适配指南
运维·自动化