使用Formidable的Strapi CMS上传超1分钟大文件出现Socket hang up错误如何解决
Strapi CMS 大文件上传超时ECONNRESET错误解决方案
问题特征
上传文件在1分钟内完成时流程正常,超过1分钟后Postman返回ECONNRESET错误,服务端日志输出如下报错,请求耗时刚好超过60秒返回500:
0|cms | 2021-10-04T06:28:03: at IncomingMessage.<anonymous> (/var/cms/node_modules/formidable/lib/incoming_form.js:122:19) 0|cms | 2021-10-04T06:28:03: at IncomingMessage.emit (events.js:314:20) 0|cms | 2021-10-04T06:28:03: at abortIncoming (_http_server.js:535:9) 0|cms | 2021-10-04T06:28:03: at socketOnClose (_http_server.js:528:3) 0|cms | 2021-10-04T06:28:03: at Socket.emit (events.js:326:22) 0|cms | 2021-10-04T06:28:03: at TCP.<anonymous> (net.js:673:12) 0|cms | 2021-10-04T06:28:03: [2021-10-04T06:28:03.363Z] debug POST /upload (60004 ms) 500
该问题本质是服务端、上传库、反向代理、客户端多层级的默认60秒超时限制,导致超过时长的上传请求被主动断开连接。
修复步骤
- 调整Node.js服务默认请求超时
在Strapi项目根目录的config/server.js文件中添加服务超时配置,按需设置时长(以下示例为10分钟):
module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), server: { // 请求超时时间,单位为毫秒 timeout: 600000, keepAliveTimeout: 600000, }, admin: { auth: { secret: env('ADMIN_JWT_SECRET'), }, }, });
- 调整Formidable上传库配置
在Strapi项目根目录的config/plugins.js中修改上传插件配置,同时调整文件大小限制和超时时间:
module.exports = { upload: { config: { providerOptions: { formidable: { // 最大上传文件大小,示例为1GB,按需调整 maxFileSize: 1024 * 1024 * 1024, // 上传超时时间,单位为毫秒 timeout: 600000, keepExtensions: true, }, }, }, }, };
- 调整反向代理超时配置(如有)
如果使用Nginx等反向代理托管Strapi服务,需要修改代理配置避免中间层断开连接,Nginx示例配置如下:
server { listen 80; server_name your-domain.com; # 允许最大上传1GB文件 client_max_body_size 1G; location / { proxy_pass http://127.0.0.1:1337; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # 代理超时配置,单位为秒 proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; } }
修改完成后执行nginx -s reload重载配置即可生效。
- 调整Postman客户端超时配置
打开Postman设置 -> 通用(General)页,将请求超时(Request timeout(in ms))设置为0(无限制)或者大于预期上传时长的数值,避免客户端主动终止请求。
所有配置修改完成后重启Strapi服务,再进行大文件上传测试即可。
内容的提问来源于stack exchange,提问作者Aditya Acharya
相关产品推荐
相关产品推荐

