Apache2服务器数据库配置存非公开config.ini.php还是环境变量?
数据库配置存储方案建议
两种方案特性对比
非公开目录config.ini.php方案
- 优势:
- 适配多站点部署场景,每个站点可独立维护配置,修改不会影响同一Apache实例下的其他业务
- 应用迁移成本低,切换Web服务软件(如从Apache更换为Nginx)不需要调整系统级配置,配置文件可跟随应用代码打包管理
- 权限控制灵活,仅需执行
chmod 400 config.ini.php && chown www-data:www-data config.ini.php即可限制仅Web运行用户可读;还可在文件开头添加<?php exit('Access denied'); ?>,就算配置被误放到Web公开目录,也不会泄露内容
- 劣势:
- 存在误操作将配置文件提交到代码仓库的风险,需要提前在.gitignore规则中排除该文件
- 若配置文件权限配置不当,可能被同服务器的其他低权限用户读取
/etc/apache2/envvars环境变量方案
- 优势:
- 配置和应用代码完全解耦,就算应用出现任意文件读取漏洞,也很难直接获取到系统级环境变量,安全等级更高
- 不存在配置文件被误上传到公开目录、误提交代码仓库的风险
- 劣势:
- 属于Apache全局配置,会影响该实例下所有站点,多站点部署时如果环境变量命名重复会出现冲突
- 配置修改后需要重启Apache服务才能生效,操作不当可能导致所有站点业务中断
- 应用迁移或更换Web服务软件时,需要重新在对应服务中配置环境变量,迁移成本更高
选型建议
- 单站点部署、对安全性要求极高的场景,优先选择envvars环境变量方案,配置时给环境变量添加唯一业务前缀避免冲突,比如
export MYAPP_DB_HOST=127.0.0.1,PHP代码中通过getenv('MYAPP_DB_HOST')读取即可 - 多站点部署、需要频繁迁移应用或可能更换Web服务软件的场景,优先选择非公开目录下的config.ini.php方案,额外注意两点安全规则:一是将配置文件存放在Web根目录(通常是htdocs、public目录)之外的路径,二是严格配置文件的读权限,禁止非Web运行用户访问
内容的提问来源于stack exchange,提问作者ikhvjs
相关产品推荐
相关产品推荐

