AWS App Runner部署Laravel 10后偶发504网关超时问题排查
偶发504网关超时的可能原因及解决方向
1. 应用初始化脚本不完整
自动部署时,Laravel的缓存生成、数据库初始化步骤可能未正确执行,导致应用进程启动后无法正常处理请求。手动重新部署时,这些步骤可能因环境状态变化(如缓存已清理、数据库连接正常)而成功。
- 检查App Runner的构建命令,确保包含必要的Laravel初始化步骤:
composer install --optimize-autoloader --no-dev php artisan config:cache php artisan route:cache php artisan migrate --force # 生产环境需加--force避免交互 - 确认启动命令在构建步骤完成后执行,避免进程提前启动。
2. VPC网络连通性延迟
自定义VPC内,App Runner新实例与RDS的网络连接可能因DNS解析延迟、安全组/NACL规则生效滞后导致偶发失败:
- 检查RDS的安全组是否允许App Runner所在安全组的入站连接(端口3306/5432等),确保规则无临时限制。
- 尝试将RDS的端点替换为私有IP地址,避免DNS解析延迟问题。
- 查看App Runner实例的VPC日志,确认是否有网络连接超时的记录。
3. 健康检查配置不合理
App Runner的健康检查可能过早判定应用“就绪”,但此时Laravel尚未完成初始化(如数据库连接建立、缓存加载):
- 修改健康检查路径为Laravel的健康检查端点(需先安装
laravel/health包),或者自定义一个简单的、无需数据库连接的检查路径(如/health)。 - 调整健康检查的超时时间和重试次数,比如将超时时间从默认的2秒延长至5秒,增加重试次数,确保应用有足够时间完成初始化。
4. 构建/部署时序问题
GitHub自动部署的构建过程中,可能存在异步操作未完成就启动应用的情况:
- 确保构建脚本中所有依赖安装、资源编译步骤完成后,再启动应用进程。例如在启动命令前添加
sleep 10(临时测试用),验证是否因初始化时间不足导致问题。 - 检查部署触发器流程,确认无中断或跳过步骤的情况。
5. RDS资源瓶颈或连接限制
自动部署时,多个App Runner实例同时启动并请求RDS,导致RDS连接池耗尽或CPU/内存过载:
- 查看RDS的监控指标(CPU使用率、连接数、磁盘IO),确认是否在部署时段出现资源峰值。
- 调整Laravel的数据库连接池配置(
config/database.php中的pool参数),避免过度占用RDS连接。 - 考虑开启RDS的自动扩容或调整实例规格,应对部署时段的突发连接请求。
临时排查技巧
- 启用App Runner的日志功能,查看部署后的应用日志,确认是否有数据库连接失败、缓存生成错误等异常信息。
- 在自动部署后,手动触发一次
php artisan optimize或数据库连接测试,模拟手动部署的修复效果,验证是否为初始化问题。
内容的提问来源于stack exchange,提问作者topninja
相关产品推荐
相关产品推荐

