1

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

4

2 回答 2

1

您可以使用 PerlPassEnv 将环境变量转发到服务器中运行的程序。但是,它们在 apache 请求周期的第一阶段生效,这与 setEnv 和 PassEnv 不同,后者直到修复阶段才生效。

过去,我使用 BEGIN 子句来设置像 ORACLE_HOME 这样的 env 变量,我希望在请求阶段之前就可以看到它。

尝试在 httpd.conf 中的 perl BEGIN 块中设置变量,这可能会比传统指令更早地暴露它。

于 2012-09-23T10:50:03.120 回答
0

也许你必须在你的虚拟主机配置中移动 setenv?

<LocationMatch /perlpath/>
    SetHandler modperl
    PerlSetEnv MYVAR myvalue
    PerlResponseHandler myhandler
    Header set Cache-control "no-cache"
</LocationMatch>
于 2012-09-21T15:31:21.940 回答