V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nxgh
V2EX  ›  前端开发

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

  •  
  •   nxgh · 3 天前 · 552 次点击

    前端使用 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

    人麻了

    15 条回复    2024-12-31 16:47:14 +08:00
    oneisall8955
        1
    oneisall8955  
       3 天前
    nginx 的过敏配置贴一下
    Suaxi
        3
    Suaxi  
       2 天前 via Android
    此时 nginx 日志里也没有这个请求

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

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

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

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

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

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


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


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


    在不让浏览器自动生成 boundary 参数,手动添加 Content-Type 时,接口能访问通,ngxin 可以看到日志。但是服务端拿不到请求体。
    nxgh
        6
    nxgh  
    OP
       2 天前
    @evan1 对比过,只有协议不一样,postman 发送的是 http1.1 , 浏览器是 h2
    Suaxi
        7
    Suaxi  
       2 天前 via Android
    @nxgh nginx 配置的 default_type 这一行先注释掉试试
    evan1
        8
    evan1  
       2 天前
    @nxgh #6 nginx 要配置下 h2.
    majunbo
        9
    majunbo  
       2 天前
    既然是 https ,你 nginx 不应该有 443 的端口配置吗?你上面只有 80 呀。
    nxgh
        10
    nxgh  
    OP
       2 天前
    @majunbo k8s 集群,HTTPS 终止在 Ingress 了
    nxgh
        11
    nxgh  
    OP
       2 天前
    @Suaxi 试过了,也不成
    Suaxi
        12
    Suaxi  
       2 天前 via Android   ❤️ 1
    @nxgh 有权限操作 K8s 的话,请求进来的时候看看 ingress 具体的日志,没权限的话请运维那边帮忙找找问题
    GGbeng1
        13
    GGbeng1  
       2 天前
    你这个配置不是生产的配置吧,看着配置没啥问题
    http2 默认只能在 https 下生效,需要 ssl 后面加个 http2
    会不会是文件大小问题
    Suaxi
        14
    Suaxi  
       2 天前 via Android
    @GGbeng1 看刚刚楼上的描述是请求还没到服务端,在 ingress 那一层就停了
    GGbeng1
        15
    GGbeng1  
       2 天前   ❤️ 1
    @Suaxi #14 如果其他服务都正常,只有上传服务异常,很难不怀疑是不是 proxy-body-size 配置问题😂,还有没有接入什么 waf 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5495 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:12 · PVG 15:12 · LAX 23:12 · JFK 02:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.