AWS Elastic Beanstalk是一个在云中部署应用程序的多功能平台,允许开发人员专注于他们的代码,而AWS则管理负载平衡、服务器配置和监控。但是,部署Symfony应用程序存在特定的挑战,例如管理友好路由、 JWT密钥生成和持久配置。本文根据实际经验提出了克服这些挑战的实用解决方案。
为 Symfony 进行 Elastic Beanstalk 的初始设置
1.设置 Symfony 的根目录
Elastic Beanstalk 默认将 Web 服务器配置为指向根目录。但是,Symfony 应用程序要求服务器指向public/子目录,当找不到所需文件时会导致 404 错误。
解决方案:Nginx 配置创建或修改.platform文件以正确将请求重定向到public/目录:
位置 / {
根 # 将公共目录设置为根目录}
2. 跨部署的配置持久性
Elastic Beanstalk 部署取代了 EC2 实例, mint 数据库 消除了任何手动更改。为了确保配置持久:
文件包含到您的存储库中。
检查它未在.gitignore中列出并将其推送到版本控制:
git commit -m“添加 Nginx 配置以重定向到 public/ 目录”
3.配置验证
执行部署后,验证 Nginx 服务器是否使用正确的目录:
该文件应显示以下行:
如果没有出现,请确保.platform文件已正确包含在部署中。
结果
通过此配置,请求被正确重定向到public/目录内的index.php控制器,解决了 404 错误并确保 Symfony 应用程序正常运行。
常见问题及解决方法
问题 1:友好路线上的 404 错误
症状
Symfony 友好路线 生成 404 错误,而主页(/)可以正确加载。
原因
Nginx 的默认 Elastic Beanstalk 配置不会将请求重定向到主index.php控制器,而这是处理 Symfony 友好路由所必需的。
解决方案
为确保 Nginx 正确重定向请求:
1.验证 URL 重写配置确保.f文件包含:location / {
2. 保留配置将此文件包含在版本控制中,并在部署后使用以下命令验证其存在:
3. 如果需要,请重新启动 Nginx如果更改未自动应用:
sudo 服务 nginx 重启
结果
友好路线正确重定向到index.php,消除了 404 错误。
问题 2:JWT 令牌为空
症状即使凭证正确,/auth
端点也会以空令牌({ "token": "" } )进行响应。
因为
Elastic Beanstalk 在每次部署时都会替换 EC2 实例,删除手动生成的 JWT 密钥,从而阻止令牌签名。
解决方案
自动生成JWT密钥: 1. 创建预部署脚本 赋予脚本执行权限 chmod
的存在 测试端 结果
使用此钩子,每次部署时都会自动生成 JWT 密钥,确保身份验证系统正常工作。