在文件上传时从上游读取响应标头时上游过早关闭连接

问题描述 投票:0回答:1

我在 Nginx 服务器后面托管的 Node.js 应用程序上遇到文件上传问题。该设置涉及使用 Express-Formidable 包作为处理文件上传的中间件,然后将其发送到 AWS S3 存储桶。

问题是文件上传请求永远不会完成 - 我的 API 请求会继续处理,直到服务器超时,并且文件永远不会到达 S3 存储桶 所有其他 API 调用都可以正常工作,但涉及文件上传的请求会无限期地停滞。重新启动 PM2 进程后,一切正常一段时间后,问题再次出现。

当我检查 Nginx 错误日志时,我发现了以下条目:

Nginx 错误日志:

2024/09/04 18:32:44 [error] 63421#63421: *9345 , client: <my_ip>, server: <backend_api>, request: "POST /api/v1/video-project HTTP/2.0", upstream: "http://127.0.0.1:4000/api/v1/video-project", host: "<backend_api>", referrer: "<backend_api>"

这是我的服务器 Nginx 配置(包括相关部分):

server {

listen 443 ssl http2;

client_max_body_size 600M;

# Proxy settings for the main API

location / {

proxy_pass http://localhost:4000;

proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection 'upgrade';

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_send_timeout 7200s;

proxy_read_timeout 7200s;

proxy_buffer_size 64k;

proxy_buffers 16 32k;

proxy_busy_buffers_size 64k;

proxy_request_buffering off;

proxy_buffering off;

proxy_connect_timeout 300;

}

}

问题:

  • 有人遇到过类似的 Nginx 在文件上传过程中过早关闭上游连接的问题吗?造成这种情况的根本原因是什么?

  • 这可能是 Nginx 的配置问题,还是与 Node.js Express-Formidable 包或 AWS S3 SDK 相关的问题?

  • 关于如何调试或解决此问题有什么建议吗?这是否与缓冲区设置或超时错误配置有关?

任何见解或建议将不胜感激!

我尝试过的:

  • 检查了 Nginx 错误日志,但找不到上述日志之外的任何内容。

  • 调整了client_max_body_size和代理设置

node.js nginx amazon-s3 nginx-config
1个回答
0
投票

也许您的服务器上的 RAM 内存有问题,并且您的 Nodejs 应用程序占用了所有 RAM,请尝试设置

pm2 start app.js --max-memory-restart 500M
启动应用程序时。

© www.soinside.com 2019 - 2024. All rights reserved.