You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Symfony Secrets存储密钥后页面加载缓慢如何解决?

问题根因定位

你遇到的加载耗时过长问题90%以上是因为PHP未安装sodium扩展导致的:Symfony Secrets默认采用libsodium算法加密密钥,如果环境没有安装ext-sodium扩展,框架会自动降级使用纯PHP实现的polyfill库执行解密逻辑,纯PHP实现的加密解密运算效率极低,单次解密就需要数秒到十数秒时间,且该解密动作会在容器初始化阶段触发,哪怕你没有实际使用定义的密钥,只要存在secrets文件就会执行解密,和你描述的现象完全吻合。

解决方案

1. 安装sodium扩展(优先尝试)

执行以下命令检查扩展是否已安装:

php -m | grep sodium

如果没有输出则代表未安装,根据你的操作系统执行对应安装命令:

  • Debian/Ubuntu系列:apt install php-sodium
  • CentOS/RHEL系列:yum install php-sodium
  • Windows环境:在php.ini中取消;extension=sodium前的注释
    安装完成后重启PHP-FPM或Web服务即可,绝大多数情况安装后耗时会直接恢复到正常水平。

2. 生产环境提前解密secrets

生产环境部署时,在执行容器编译前先执行以下命令将secrets解密到本地缓存文件:

php bin/console secrets:decrypt-to-local --force --env=prod

该命令会将所有密钥解密后写入.env.local.php文件,容器编译时会直接读取该文件的明文变量,完全跳过运行时解密步骤,进一步提升性能,注意将.env.local.php加入.gitignore避免提交到代码库。

3. 其他可选排查项

  • 检查config/secrets/目录是否存储在本地高速磁盘中,如果放在NFS等网络挂载存储上会增加文件读取耗时,迁移到本地磁盘即可。
  • 排查是否存在自定义代码主动调用Secrets组件的解密接口,导致重复执行解密逻辑,正常业务代码不需要手动调用解密接口,直接通过环境变量注入即可。

内容的提问来源于stack exchange,提问作者Adridot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:06:03