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

20 天前
 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

人麻了

960 次点击
所在节点    前端开发
15 条回复
oneisall8955
20 天前
nginx 的过敏配置贴一下
nxgh
20 天前
Suaxi
20 天前
此时 nginx 日志里也没有这个请求

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

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

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

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

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

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


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


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


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