You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Multer本地运行正常但生产环境失效问题排查求助

问题:Multer处理multipart请求在生产环境挂起,Nginx报连接拒绝

开发环境功能正常,但部署到生产环境后出现异常:

  • 未添加Multer时,接口能接收请求,但multipart form-data格式的请求体为空:
server.post('/something', async (req, res) => {
  console.log('start')
  console.log(req.body, res.body)
  res.sendStatus(200)
})
  • 添加Multer中间件后,请求直接挂起,Nginx提示连接超时:
server.post('/something', upload.any(), async (req, res) => {
  console.log('start')
  console.log(req.body, res.body)
  res.sendStatus(200)
})
  • 当前Multer配置:
const upload = multer()
  • 测试差异:用Postman发送纯文本raw请求可正常响应,发送form-data请求时必挂起

已尝试的排查操作

  • 给Multer添加dest磁盘存储配置
  • 为Node服务器设置超时参数
  • 移除限流插件
  • 在Nginx中调整超时配置

完整Nginx配置

worker_processes auto;
#Check the concnections
events {
  worker_connections 1024;
  multi_accept on;
}

http {
    client_max_body_size 15m;
    proxy_read_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    upstream ip{
        least_conn;
        server app:4000 weight=10 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 8080; # ssl;
        server_name ip;
        # ssl on;
        location / {
            proxy_pass http://ip/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_ssl_server_name on;
        }
    }
}

Nginx错误日志

*3 connect() failed (111: Connection refused) while connecting to upstream, client: ip, server: ip, request: "POST /something HTTP/1.1", upstream: "http://172.0.0.4:4000/something", host: "ip:8080"

排查建议

  1. 容器连通性验证:日志显示Nginx无法连接到172.0.0.4:4000,先确认Node服务容器的实际IP是否为此地址,或者在Nginx容器内执行curl http://172.0.0.4:4000/something测试连通性;同时检查upstream中的app主机名是否能正确解析到Node容器IP。
  2. Multer存储方式调整:默认的内存存储可能在处理较大文件时导致Node服务内存溢出崩溃,改成磁盘存储测试:
const upload = multer({ dest: '/tmp/uploads/' })
  1. Nginx代理配置修正:全局设置的Connection "upgrade"可能干扰普通form-data请求,针对/something接口单独覆盖配置:
location /something {
    proxy_pass http://ip/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection ""; # 取消upgrade连接头
}
  1. Node服务日志排查:检查Node服务的运行日志,确认处理form-data请求时是否存在未捕获异常、内存不足等崩溃情况。
  2. 上传大小限制对齐:确保Node服务端也设置了对应大小的限制,比如给Multer添加limits参数:
const upload = multer({
    limits: { fileSize: 15 * 1024 * 1024 } // 和Nginx的client_max_body_size保持一致
})

内容的提问来源于stack exchange,提问作者JoseGE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:56:09