AWS EC2 Amazon Linux 2上Node.js文件上传POST请求无响应求助
AWS EC2 Amazon Linux 2上Node.js文件上传服务无响应排查方案
1. 先排查网络与端口可达性
- 检查EC2安全组规则,确保Node服务监听的端口(如3000)已开放入站流量,测试阶段可暂时将来源设为
0.0.0.0/0,后续再限制为指定IP。 - 在EC2服务器本地执行
curl http://localhost:你的端口号或telnet localhost 你的端口号,确认服务本身在服务器内部能正常响应。如果本地访问失败,直接查看服务启动日志(用pm2 logs或控制台输出),定位启动报错。
2. 权限问题针对性检查
- 确认Node进程的运行用户:执行
ps aux | grep node查看进程所属用户,确保该用户对文件存储目录有读写权限。例如存储目录为/var/www/uploads,执行chown -R 进程用户名:用户组 /var/www/uploads,同时设置目录权限chmod -R 755 /var/www/uploads。 - 检查临时目录权限:Node处理上传文件依赖
/tmp临时目录,执行ls -ld /tmp确认权限为drwxrwxrwt,若异常则执行chmod 1777 /tmp修复。 - 验证CMS访问权限:如果调用第三方CMS接口,确认EC2服务器IP在CMS白名单内,同时检查部署环境中的API密钥、令牌等配置是否与本地一致(环境变量是否正确设置)。
3. 日志定位请求阻塞点
- 启用请求日志:添加morgan等日志中间件,记录所有到达服务器的请求。如果日志中看不到POST请求,说明问题出在网络层面;如果能看到请求但无响应,定位到代码中处理文件上传、CMS调用或删除操作的环节。
- 查看系统日志:执行
journalctl -u 你的node服务名(若用systemd管理服务),或查看/var/log/messages,查找是否有Permission denied类的权限报错。
4. 代码与环境差异排查
- 统一文件路径:避免使用相对路径(如
./uploads),改用绝对路径,防止EC2上服务启动目录与本地不一致导致路径错误。 - 完善错误捕获:在文件删除等异步操作中添加错误处理,避免因未处理的错误导致请求挂起。示例:
const fs = require('fs'); // 处理文件删除时的错误捕获 fs.unlink(filePath, (err) => { if (err) { console.error('删除文件失败:', err); return res.status(500).send('文件处理失败'); } res.status(200).send('文件处理完成'); });
- 对齐Node版本:执行
node -v检查EC2与本地的Node版本,若版本差异较大,用nvm切换到与本地一致的版本。
5. 服务器防火墙检查
Amazon Linux 2默认使用firewalld,执行sudo firewall-cmd --list-ports查看是否开放了服务端口,未开放则执行:
sudo firewall-cmd --add-port=你的端口号/tcp --permanent sudo firewall-cmd --reload
内容的提问来源于stack exchange,提问作者Rocky Essel
相关产品推荐
相关产品推荐

