Использование URL в контейнере Vhost динамически с mod_perl

Мы хотим получить URL-адрес и использовать его в режиме реального времени.

Чтобы продемонстрировать мой случай, я поместил случайные числа в директиву ServerAdmin,

$ ServerAdmin = int (rand (100)). "Loko\@koko.com";

Как вы, возможно, знаете, это случайное число назначается только при перезапуске сервера и никогда не меняется до следующего перезапуска.

Это то, что мы хотим: если julie.myperl.com является запрашиваемым доменом, то $ServerAdmin = julie@myperl.com, то есть в режиме реального времени.

Надеемся, что есть решение, так как это поможет нам удалить тысячи файлов конфигурации и избавит нас от тысяч перезагрузок apache.

Спасибо, деврим

вот похожая ситуация и решение,

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

и вот почему задаем этот вопрос, мы создали API, в котором субдомены обозначают имена учетных записей Unix, поэтому переменная часть {$user}.domain.com должна использоваться в vhost conf. Использование переменных в контейнерах виртуального хоста 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>
Другие вопросы по тегам