使用 mod_perl 在 Vhost 容器内动态使用 URL

使用 mod_perl 在 Vhost 容器内动态使用 URL

我们希望实时检索 URL 并在我们的虚拟主机中使用它。

为了证明我的观点,我在 ServerAdmin 指令中放置了随机数,

$ServerAdmin = int(rand(100))。“loko\@koko.com”;

您可能知道,仅当您重新启动服务器时才会分配此随机数,并且在再次重新启动之前不会改变。

这是我们想要的:如果 julie.myperl.com 是请求的域,那么 $ServerAdmin = [电子邮件保护],也就是实时的。

希望有一个解决方案,因为这将帮助我们删除数千个配置文件,并节省我们数千次 apache 重新加载的时间。

谢谢,Devrim

以下是类似的情况和解决方案,

http://httpd.apache.org/docs/1.3/mod/mod_vhost_alias.html

这就是为什么要问这个问题,我们已经建立了一个 API,其中子域表示 unix 帐户名称,因此必须在 vhost conf 中使用 {$user}.domain.com 的变量部分。 在 Apache 虚拟主机容器中使用变量

答案1

我之前回答过一个类似的问题,可能对你有帮助。基本上,它是 perl 的一部分,可以根据 url 进行任何类型的动态配置。在该示例中,它根据目录设置了 Require 指令,但只需进行一点点调整,它应该也能满足您的需要。

请看这里:Apache 中的动态身份验证领域

希望有所帮助。

编辑:这应该可以做到。我过去常常server_admin直接操纵服务器管理员地址,而不是add_config因为add_config它像一个<Directory>块一样,并且ServerAdmin在那里是不允许的。

<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);

   eval{
    $r->server->server_admin("$subdomain\@$domain");
   };
   if ( $@ ) { warn $@ }

   return OK;

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

相关内容