我正在构建一个mod_perl网站,我需要设置一个将在Perl代码中使用的环境变量。
到目前为止,我使用PerlSetEnv
指令设置此变量:
PerlSetEnv MYVAR myvalue
<LocationMatch /perlpath/>
SetHandler modperl
PerlResponseHandler myhandler
Header set Cache-control "no-cache"
</LocationMatch>
这很好用,但我想预加载我的mod_perl处理程序,因为第一次调用非常慢。所以我将Apache虚拟主机文件更改为:
PerlSetEnv MYVAR myvalue
PerlModule myhandler <- add this line
<LocationMatch /perlpath/>
SetHandler modperl
PerlResponseHandler myhandler
Header set Cache-control "no-cache"
</LocationMatch>
但是,如果我执行此操作,则在预加载MYVAR
时我的自定义环境变量myhandler
未设置,并且我的代码失败。
那么可以设置一个将由PerlModule
指令导出的环境变量吗?
答案 0 :(得分:1)
您可以使用PerlPassEnv将env变量转发到服务器中运行的程序。但是,它们在apache请求周期的第一阶段生效,与setEnv&amp; PassEnv在修复阶段才生效。
在过去,我使用BEGIN子句来设置像ORACLE_HOME这样的env变量,我想在请求阶段之前看到它。
尝试在httpd.conf中的perl BEGIN块中设置变量,这可能会在传统指令之前暴露它。
答案 1 :(得分:0)
也许你必须在虚拟主机配置中移动setenv?
<LocationMatch /perlpath/>
SetHandler modperl
PerlSetEnv MYVAR myvalue
PerlResponseHandler myhandler
Header set Cache-control "no-cache"
</LocationMatch>