问题及解决方法
维护的一个 PHP 系统最近多了一个新环境,在部署的时候发现获取不到系统的环境变量,问了一下运维同学,也没什么特别的配置,在网上搜索了一圈,发现这个问题在 nginx + php-fpm 模式下挺普遍的,下面是两种解决方法:
1. 通过 nginx 的 fastcgi_param 传值给 php-fpm
fastcgi_param SOME_PARAM param-value;
这种也是在网上能搜到的最多的解决方法,是可用的,但是如果有非常多的环境变量,那么这里都会配置一遍,这其实非常不方便的,这里就有第二种方法。
2. 修改 php-fpm 配置 clear_env = no
php-fpm 默认配置为 clear_env = yes
,为 FPM worker 进程清除环境变量。应该是为了安全吧,防止访问到一些敏感的数据。把这个配置修改为 clear_env = no
就可以访问到系统的环境变量了。
参考
php getenv无法获取环境变量Environment variables ignored by php-fpm