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

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

相关推荐
日常筹谋记20 分钟前
西门子 G120XA 变频器在数据中心冷却水泵系统的应用与数字化运维价值
运维
北城笑笑21 分钟前
Server 18 ,Nginx + Vite 前端部署排错实战:从 `/api/gpt/chat` 404 到 9012 后端服务的完整定位过程
linux·运维·前端·nginx·ubuntu·vue
Elastic 中国社区官方博客24 分钟前
Elasticsearch:什么是向量数据库?
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
江湖有缘28 分钟前
从零搭建私有云相册:使用 Docker 一键部署 Damselfly全攻略
运维·docker·容器
NJCloud35 分钟前
ELK企业级日志分析平台(四)——基于 ELFK + Kafka 的日志采集与传输平台部署实践
linux·运维·分布式·elk·kafka
lisanmengmeng39 分钟前
搭建elk环境并接入frostmourne,实现监控报警效果(一)
运维·elk·jenkins
王志来137944730081 小时前
聚焦五大核心场景:工控服务器机箱平台的垂直深耕之路
运维·服务器·python
ii_best1 小时前
手机自动化脚本按键精灵实战:随机布局安全数字键盘的自动化输入方案
android·运维·ios·自动化·手机
鲁邦通物联网1 小时前
充电站底层脱机DLB引擎解构:基于Linux调度的边缘计算网关并发控制实战
linux·运维·人工智能·边缘计算·边缘计算网关·5g数采·工业级边缘计算网关
zhonyu鱼2 小时前
RustDesk:开源免费的远程桌面软件,可自建服务器掌控全部数据
运维·服务器·开源