问题及解决方法

维护的一个 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