mod_env模块用于控制传送给CGI脚本、SSI页面及部分外部程序的环境变量,通过SetEnv设置、UnsetEnv清除,但对PHP-FPM无效,需在PHP-FPM pool中单独配置env[]参数生效。
apache 的 mod_env 模块用于控制传送给 cgi 脚本、ssi 页面以及部分外部程序的环境变量。它不改变 apache 自身运行时逻辑,也不影响服务器进程的系统级环境,而是专门在请求处理链中“注入”或“剔除”变量,供下游脚本使用。
确认并启用 mod_env 模块
该模块默认可能未加载,需手动启用:
- 检查是否已启用:
httpd -M | grep env或apache2ctl -M | grep env - 若未出现
env_module (shared),需在主配置(如httpd.conf或mods-enabled/env.load)中添加:LoadModule env_module modules/mod_env.so - 重启 Apache 生效:
systemctl restart apache2或apachectl graceful
用 SetEnv 定义可传递的环境变量
SetEnv 在请求进入 CGI/PHP 处理阶段前设置变量,这些变量对 getenv()、$_SERVER(部分情形)可见,但仅限于 CGI、mod_php(已弃用)等直连模式;对 PHP-FPM 无效。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 语法:
SetEnv KEY VALUE - 支持作用域:全局配置、
<virtualhost></virtualhost>、<directory></directory>、.htaccess(需AllowOverride FileInfo) - 示例:
SetEnv APP_ENV productionSetEnv SITE_ROOT /var/www/myapp - 注意:值中含空格需用引号包裹,如
SetEnv DB_NAME "my database"
用 UnsetEnv 清除不需要透传的变量
避免敏感信息(如系统 PATH、认证密钥)意外泄露给 CGI 脚本,可用 UnsetEnv 显式移除。
- 语法:
UnsetEnv VAR_NAME [VAR_NAME...] - 常见用途:
UnsetEnv SSH_AUTH_SOCKUnsetEnv LD_LIBRARY_PATH - 也可配合
PassEnv精准控制哪些系统变量允许透传(例如只传PWD或HOME)
PHP-FPM 场景下如何让环境变量真正生效
这是最容易出错的一环:Apache 的 SetEnv 对 PHP-FPM 进程完全无效,因为两者是独立进程。必须通过 PHP-FPM 配置显式注入。
- 编辑对应 pool 配置(如
/etc/php/*/fpm/pool.d/www.conf) - 添加:
env[APP_ENV] = productionenv[SITE_ROOT] = /var/www/myapp - 重启 PHP-FPM:
systemctl restart php*-fpm - PHP 中验证:
var_dump(getenv('APP_ENV'));或echo $_ENV['APP_ENV'] ?? 'not set';









