如何获取部署在AWS的Laravel应用RDS MySQL数据库凭证?
如何获取Laravel应用的RDS数据库凭证?
问题背景
我接手了一个部署在AWS上的PHP/Laravel应用,使用MySQL RDS数据库,由Nginx托管应用内容。应用运行正常,但我没有数据库凭证,无法访问数据库:
- 查看
config/database.php,发现数据库配置均通过env()函数读取环境变量,无硬编码凭证 - 执行
printenv命令检查服务器全局环境变量,未找到DB_USERNAME、DB_PASSWORD等相关变量 - 之前的开发者已停止配合,无法直接获取凭证
解决方案
1. 查找Laravel项目根目录的.env文件
Laravel默认通过项目根目录的.env文件存储环境变量。根据Nginx配置,应用的public_html目录在/var/www/project/public_html,因此项目根目录为/var/www/project,前往该目录查找隐藏的.env文件:
# 进入项目根目录 cd /var/www/project # 查看.env文件内容 cat .env # 若看不到文件,用ls -a列出所有隐藏文件 ls -a
2. 检查PHP-FPM的环境变量配置
如果服务器未设置全局环境变量,可能是在PHP-FPM的池配置中单独定义了数据库相关变量。常见配置路径:
/etc/php-fpm.d/www.conf/etc/php/{你的PHP版本}/fpm/pool.d/www.conf(比如/etc/php/8.1/fpm/pool.d/www.conf)
打开配置文件,查找以env[DB_*]开头的配置项:
env[DB_HOST_WRITE] = "your-rds-endpoint" env[DB_USERNAME] = "database-username" env[DB_PASSWORD] = "database-password"
若修改了配置,需重启PHP-FPM生效:
systemctl restart php-fpm
3. 通过AWS RDS控制台重置密码
若无法找到现有凭证,可以通过AWS控制台重置RDS数据库的主密码:
- 登录AWS控制台,进入RDS服务
- 找到对应的数据库实例,点击实例名称进入详情页
- 点击操作 -> 修改
- 在“数据库选项”区域找到“主密码”,输入新密码并确认
- 滚动到页面底部,点击继续,选择立即应用修改,等待实例更新完成
- 重置密码后,需要将新密码同步到应用的环境配置(
.env或PHP-FPM配置)中
4. 临时输出应用运行时的数据库配置
可以在Laravel项目中临时创建一个测试脚本,查看应用实际使用的数据库配置:
在/var/www/project/public_html目录下创建test-db-config.php文件,内容如下:
<?php require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; // 输出MySQL连接配置 echo "<pre>"; print_r(config('database.connections.mysql')); echo "</pre>";
访问http://mytable.sa/test-db-config.php即可看到应用当前使用的数据库连接参数,使用完毕后务必删除该文件,避免泄露敏感信息。
5. 检查Nginx的fastcgi_params配置
查看Nginx的fastcgi_params文件(通常路径为/etc/nginx/fastcgi_params),确认是否通过fastcgi_param指令直接传递了数据库环境变量:
fastcgi_param DB_USERNAME "db-username"; fastcgi_param DB_PASSWORD "db-password";
内容的提问来源于stack exchange,提问作者Simple Fellow
相关产品推荐
相关产品推荐

