You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2上MERN应用出现504 Gateway错误求助

排查与解决MERN应用EC2部署的504 Gateway超时问题

一、深挖关键日志

虽然你提到Nginx和pm2日志无异常,但可以针对性排查以下日志:

  • Nginx错误日志:默认路径为/var/log/nginx/error.log,搜索504、timeout、proxy关键字。若未发现线索,可临时将Nginx日志级别改为debug(修改/etc/nginx/nginx.conf中error_log行),复现问题后改回warn/error。
  • EC2系统日志:通过AWS控制台EC2实例的「监控」→「系统日志」,查看是否有内存/CPU耗尽、进程被OOM Killer终止的记录——EC2免费层仅1G内存,极易被MERN栈+Nginx+MongoDB连接池占满。
  • MongoDB云日志:登录MongoDB控制台,查看数据库连接数、慢查询日志。免费版有连接数限制(通常50个),并发请求可能导致连接池耗尽,进而卡住API请求。
  • Node.js进程错误输出:用pm2 logs [api-app-name] --err单独查看API服务的错误日志,pm2默认日志可能遗漏异步错误或未处理的Promise拒绝。

二、排查性能瓶颈

1. 数据库查询优化

只读搜索场景下,慢查询是超时核心诱因:

  • 给搜索字段加索引:例如针对关键词字段执行db.collection.createIndex({ searchField: "text" }),用explain()分析查询计划,确认索引是否生效。
  • 限制返回数据量:用limit()+skip()实现分页,避免一次性返回大量数据,减少传输与处理耗时。
  • 对齐区域部署:若EC2与MongoDB云服务器不在同一AWS区域,跨区域延迟会放大查询耗时,尽量将二者部署在同一区域。

2. Node.js/Express优化

  • 清理冗余中间件:移除不必要的全局拦截器、日志类中间件,减少请求处理链路的耗时。
  • 配置合理连接池:在Mongoose配置中设置poolSize: 10(根据EC2内存调整,不宜过大),避免每次请求新建数据库连接。
  • 开启Cluster模式:利用EC2多核CPU(免费层为1核,但Cluster模式可提升并发能力),通过pm2 start api.js -i max启动多进程。

三、补充Nginx配置优化

你已添加超时配置,可进一步优化:

  • 在location /api/块内明确写入超时参数,避免全局配置未生效:
location /api/ {
    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;
    send_timeout 600s;
    # 原有配置保留...
}
  • 增加缓冲区配置,避免大响应导致超时:
proxy_buffers 8 16k;
proxy_buffer_size 32k;
  • 移除WebSocket升级配置:只读搜索应用无需WebSocket,删除proxy_set_header Upgrade $http_upgrade;与proxy_set_header Connection 'upgrade';,减少Nginx处理逻辑。

四、EC2资源限制排查

EC2免费层资源有限,需重点监控:

  • 实时查看资源占用:用top/htop命令监控CPU、内存、Swap使用情况。若内存占用常超80%,可开启Swap分区:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
  • 控制进程数量:用ps aux | grep node查看pm2启动的进程数,过多进程会占用内存,适当减少Cluster进程数。

五、并发请求模拟测试

用ab工具模拟并发请求,同时监控资源状态:

ab -n 100 -c 6 http://你的EC2公网IP/api/search?query=测试关键词

另开终端用htop(监控EC2资源)、mongostat(监控MongoDB状态)实时观测,定位是CPU、内存还是数据库连接的问题。


内容的提问来源于stack exchange,提问作者Sohil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:35:32