我在 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和代理设置
也许您的服务器上的 RAM 内存有问题,并且您的 Nodejs 应用程序占用了所有 RAM,请尝试设置
pm2 start app.js --max-memory-restart 500M
启动应用程序时。