部署在Elastic Beanstalk的Symfony API除根路由外均返回404求助
解决Elastic Beanstalk部署Symfony API时非根路由404问题
这个问题的核心是Elastic Beanstalk默认的Nginx配置没有适配Symfony的URL重写规则——只有根路径被指向了public/index.php,其他请求都被Nginx当作静态资源查找,自然返回404。以下是具体的解决方法:
方法一:通过.ebextensions配置Nginx重写规则
这是最推荐的方式,不需要手动登录EC2实例,配置会随代码一起部署生效:
- 在Symfony项目根目录创建
.ebextensions/nginx/conf.d目录结构 - 在该目录下新建
symfony.conf文件,写入以下内容:
files: "/etc/nginx/conf.d/symfony.conf": mode: "000644" owner: root group: root content: | location / { try_files $uri $uri/ /index.php$is_args$args; }
- 将修改后的代码重新部署到Elastic Beanstalk
这个配置会让Nginx先检查请求路径是否对应存在的文件/目录,如果不存在,就把请求转发到index.php,由Symfony的路由组件处理所有端点请求。
额外检查项
如果配置后仍有问题,确认以下两点:
- 确保Symfony的
public目录被设置为EB的文档根。可以在composer.json中添加:
"extra": { "elastic-beanstalk": { "document-root": "public" } }
- 或者通过
.ebextensions配置文档根:
option_settings: - namespace: aws:elasticbeanstalk:container:php:phpini option_name: document_root value: /var/app/current/public
验证方式
如果需要排查问题,可以登录EB的EC2实例,查看:
/etc/nginx/conf.d/symfony.conf是否存在且内容正确/var/log/nginx/access.log和/var/log/nginx/error.log,确认请求是否被转发到index.php
内容的提问来源于stack exchange,提问作者Diplodoco
相关产品推荐
相关产品推荐

