使用 mod_perl 更改 apache 配置,不起作用!

使用 mod_perl 更改 apache 配置,不起作用!

该脚本应该从 *.domain.com 中取出 *,将其分配给 $subdomain 变量,然后将 $subdomain 放入 AssignUserId。

但是,无论我多么努力,我都无法让它工作。我已经为此工作了好几天,真的很绝望。如果您认为这很麻烦,请向我收取咨询费并获取 root 密码。

有什么想法吗?谢谢...

<Perl>
 Use Apache2::ServerRec qw//; 
 use Apache2::ServerUtil qw//; 
 use Apache2::RequestRec qw//; 
 use Apache2::RequestUtil qw//; 
 use Apache2::Const qw/OK DECLINED/; 

 my $s = Apache2::ServerUtil->server; 

 $s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_; 
 if ( $r->hostname =~ m/(.*)\.([^.]+\.\w+)$/ ) { 
 my($subdomain,$domain) = ($1,$2); 

 #
 # THIS WORKS!
 # -----------
 # if requested domain is fio.domain.com,
 # this successfully assigns ServerAdmin [email protected]
 # so gathering domain parts working

 $r->server->server_admin("$subdomain\@$domain");

 #
 # THIS DOESN'T!
 # --------------
 # this is supposed to insert this line inside Virtual host
 # --------------
 # <IfModule mpm_itk_module> AssignUserId fio domain</IfModule>
 # --------------

 $r->add_config([ "<IfModule mpm_itk_module>", 
 "AssignUserId $subdomain $domain", 
 "</IfModule>", 
 ]); 

 if ( $@ ) { warn $@ } 


 return OK; 

 } else { 
 return DECLINED; 
 } 
 }); 
</Perl> 

答案1

PerlHeaderParserHandler我最初的猜测是,您已经通过传递给您的钩子$r或请求对象设置了一个处理程序。

来自文档分配用户 ID(要动态配置的参数)配置上下文必须是 虚拟主机。我猜这意味着您应该根据每个服务器而不是根据每个请求进行配置。

$s->add_config文档而不是$r->add_config

取决于指令的处理,有可能在调用请求钩子时 AssignUserId 的处理已经发生,在这种情况下,除了将每个子域静态配置为虚拟服务器之外,您无能为力。

更新 1:当然,如果您尝试$s->add_config对每个请求都使用,则可能会存在内存中存在笨重的服务器配置的风险,因为相同的指令会一遍又一遍地重复。这使得对每个请求都更新服务器配置变得不切实际。

也许仍然可以使用 来执行此操作$r->add_config(),请注意文档中“配置指令的处理方式就像在 <Location> 块中给出的一样”。您是否尝试过将 AssignUserId 参数放在 <Location> 块中的非 Perl 测试?

相关内容