请教一个前端项目 Docker+Nginx 部署的问题

2024 年 12 月 31 日
 nxgh

前端使用 Nuxt.js 打包为 SPA ,使用 docker + Nginx 部署,生产环境有个文件上传接口报错, 接口使用 Nginx 反代到 Java 服务 报错信息为: { "message": "An unexpected error occurred", "request_id": "b7aa8b336db52027b752634d9fba3b47" } 接口是传统的 POST + FormData 形式,此时 nginx 日志里也没有这个请求 在添加手动添加 heade 头 Content-Type: multipart/form-data 后报错会消失,但此时后台没有接收到 body 同时使用 postman 可以调通,nginx 也有日志信息 Nginx 关于文件上传相关的配置应该都配置上了,测试环境正常访问, 怀疑是 https 的问题, 之前部署过的项目都是上传请求都是 http1.1 ,这个是 h2

人麻了

1896 次点击
所在节点    前端开发
15 条回复
itechify
2024 年 12 月 31 日
nginx 的过敏配置贴一下
nxgh
2024 年 12 月 31 日
Suaxi
2024 年 12 月 31 日
此时 nginx 日志里也没有这个请求

但此时后台没有接收到 body 同时使用 postman 可以调通

看描述有点乱,建议分别贴一下 nginx 的配置,error log ,java 服务端有报错的全量栈信息也可以贴一下

ps: 1. postman/swagger 等等直接调接口能调通,检查一下前端的统一请求拦截(一般文件上传和普通的 crud 接口要分开处理一下)

2. 如果服务端正确收到了请求(请求顺利通过网关等转发到了对应的服务),但是上传失败,一般在报错的栈信息那就能找到问题

3. nginx 配置这里一般就是 request_body_size 大小的设置,内部的 http 已经被反代为了 https ,和是否 https 没有太大关系
evan1
2024 年 12 月 31 日
postman 能调通的话应该是前端调用的问题。

把 postman 的 console 打开看看请求详细信息,request head 、body 等等,对比下前端发起的请求的 head 、body 看看有什么区别。
nxgh
2024 年 12 月 31 日
@Suaxi 原本应该有换行的;


使用浏览器访问就会返回 [An unexpected error occurred] 没有其他的信息, 此时 nginx 没有关于这个接口的日志,error_log 等级已经设置为 debug 了


前端请求方式应该啥没问题,测试环境过了而且在报错后试过好几种方式。Nuxt.js 的 $fetch 、和默认的 fetch XHR axios 等


在不让浏览器自动生成 boundary 参数,手动添加 Content-Type 时,接口能访问通,ngxin 可以看到日志。但是服务端拿不到请求体。
nxgh
2024 年 12 月 31 日
@evan1 对比过,只有协议不一样,postman 发送的是 http1.1 , 浏览器是 h2
Suaxi
2024 年 12 月 31 日
@nxgh nginx 配置的 default_type 这一行先注释掉试试
evan1
2024 年 12 月 31 日
@nxgh #6 nginx 要配置下 h2.
majunbo
2024 年 12 月 31 日
既然是 https ,你 nginx 不应该有 443 的端口配置吗?你上面只有 80 呀。
nxgh
2024 年 12 月 31 日
@majunbo k8s 集群,HTTPS 终止在 Ingress 了
nxgh
2024 年 12 月 31 日
@Suaxi 试过了,也不成
Suaxi
2024 年 12 月 31 日
@nxgh 有权限操作 K8s 的话,请求进来的时候看看 ingress 具体的日志,没权限的话请运维那边帮忙找找问题
GGbeng1
2024 年 12 月 31 日
你这个配置不是生产的配置吧,看着配置没啥问题
http2 默认只能在 https 下生效,需要 ssl 后面加个 http2
会不会是文件大小问题
Suaxi
2024 年 12 月 31 日
@GGbeng1 看刚刚楼上的描述是请求还没到服务端,在 ingress 那一层就停了
GGbeng1
2024 年 12 月 31 日
@Suaxi #14 如果其他服务都正常,只有上传服务异常,很难不怀疑是不是 proxy-body-size 配置问题😂,还有没有接入什么 waf 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1101551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX