Laravel 9部署AWS Elastic Beanstalk遇ERR_CONNECTION_REFUSED错误求助
排查Laravel 9部署AWS Elastic Beanstalk后ERR_CONNECTION_REFUSED错误
首先明确:ERR_CONNECTION_REFUSED 不是CORS问题——CORS错误是浏览器控制台明确提示跨域相关信息,而连接拒绝是客户端根本无法与服务器建立TCP连接,你之前配置CORS的操作对解决这个问题没有帮助,先把排查方向转到网络连通性和应用运行状态上。
以下是具体排查步骤:
1. 检查Elastic Beanstalk环境与EC2实例状态
- 登录AWS控制台,进入Elastic Beanstalk环境页面,查看环境健康状态是否为
Ok,如果是Degraded或Severe,查看事件日志里的具体报错信息。 - 关联的EC2实例需处于
运行中状态,进入EC2控制台检查实例状态,若实例频繁重启,大概率是应用启动失败导致。
2. 修正负载均衡器与目标组的端口匹配问题
从你提供的负载均衡配置截图来看:
- 负载均衡监听的是HTTP 80端口,但目标组转发的端口如果和Laravel应用运行的端口不匹配,就会出现连接拒绝。
- 默认情况下,Laravel用
artisan serve启动时端口是8000,但Elastic Beanstalk默认的Nginx/Apache配置可能期望应用运行在80端口。你需要:- 确认目标组的转发端口:进入EC2目标组页面,查看
目标标签下的端口是否与应用实际运行端口一致。 - 若使用Nginx反向代理,在项目根目录创建
.platform/nginx/conf.d/laravel.conf文件,添加以下配置(假设应用运行在8000):location / { try_files $uri $uri/ /index.php?$query_string; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
- 确认目标组的转发端口:进入EC2目标组页面,查看
3. 检查应用部署与运行日志
- 登录EC2实例,查看Laravel应用日志:
检查是否有依赖缺失、数据库连接失败、环境变量配置错误等问题。tail -f /var/app/current/storage/logs/laravel.log - 查看Nginx错误日志(若用Nginx):
tail -f /var/log/nginx/error.log - 查看Elastic Beanstalk部署日志,确认
composer install、npm run build等步骤是否执行成功,有没有权限错误或依赖安装失败。
4. 验证安全组配置
- 负载均衡器的安全组需允许外部访问80/443端口(来源设为
0.0.0.0/0)。 - EC2实例的安全组需允许负载均衡器的安全组访问应用运行的端口(比如8000或80),不能只开放给
0.0.0.0/0(虽然测试可以,但生产建议限制来源)。
5. 确认Laravel应用启动方式
生产环境不建议用php artisan serve启动,最好配置Nginx+PHP-FPM:
- 确保Elastic Beanstalk的PHP环境已正确配置,项目根目录的
public文件夹是Web根目录。 - 检查
.env文件中的APP_URL是否设置为负载均衡的域名或公网IP,APP_ENV设为production。
内容的提问来源于stack exchange,提问作者Isuru
相关产品推荐
相关产品推荐

