Express文件上传本地正常但cPanel上仅大文件失败问题求助
Express文件上传本地正常但cPanel上仅大文件失败问题求助
我最近碰到个棘手的问题,想请教各位大佬:我开发了一个Express项目,支持上传CSV文件并导入数据库,之前本地和cPanel部署都运行正常,但最近cPanel上的上传接口彻底失效了——其他接口都能正常响应,唯独上传功能不管用。
我甚至写了个极简的测试接口,代码如下:
// ./controller/customer-service.js const addCustomerByImport = async (req, res, next) => { try { res.status(200).json("success") } catch (e) { next(e) } }
结果这个接口对大文件还是没反应,只有几KB的小CSV能正常触发返回,2MB左右的文件就完全没响应。另外我注意到cPanel的SWAP内存使用率已经到100%了,不知道会不会影响?
想请教下可能的原因和解决办法,谢谢大家!
可能的原因及排查方向:
cPanel的PHP上传限制
很多cPanel主机默认的PHP上传参数很小,刚好会卡到2MB这个阈值:- 登录cPanel找到
MultiPHP INI Editor,检查这几个参数:upload_max_filesize:默认可能是2MB,改成10MB以上post_max_size:必须比upload_max_filesize大,比如设为12MBmax_execution_time:大文件上传和解析需要更长时间,改成60或120
- 另外如果用了
multer这类文件上传中间件,检查中间件的limits配置,比如multer({ limits: { fileSize: 2 * 1024 * 1024 } })会限制2MB,需要调大这个值。
- 登录cPanel找到
SWAP内存耗尽的影响
SWAP使用率100%肯定会有影响:
当物理内存不足时,服务器会用SWAP虚拟内存,但SWAP速度远慢于物理内存,大文件上传时需要更多内存处理(比如缓存文件、解析CSV),SWAP满了之后进程可能被系统杀死或者卡死。
解决办法:- 如果有SSH权限,先尝试重置SWAP:
sudo swapoff -a && sudo swapon -a - 长期来看,建议升级服务器物理内存,或者优化代码,比如用流式解析CSV(比如
csv-parser),不要把整个文件加载到内存里。
- 如果有SSH权限,先尝试重置SWAP:
cPanel的安全规则拦截
部分主机商的ModSecurity或者防火墙规则会拦截大文件上传,认为是恶意请求:- 可以联系主机商查看ModSecurity的日志,确认有没有相关拦截记录
- 临时关闭ModSecurity测试(注意安全),如果关闭后正常,就需要让主机商调整对应的规则。
超时设置过短
大文件上传需要更长的传输时间,如果超时设置太短会导致请求被中断:- 检查Express的服务器超时设置:
server.timeout = 60000;(设置为60秒) - 检查cPanel里Apache/Nginx的超时配置,比如Apache的
Timeout指令、Nginx的proxy_read_timeout,确保值足够大。
- 检查Express的服务器超时设置:
备注:内容来源于stack exchange,提问作者Austinnick
相关产品推荐
相关产品推荐

