为什么Apache PerlModule指令不设置自定义环境变量?

时间:2012-09-21 10:05:22

标签: perl apache2 mod-perl2

我正在构建一个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指令导出的环境变量吗?

2 个答案:

答案 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>