Назад | Перейти на главную страницу

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

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

Чтобы продемонстрировать свой случай, я поместил случайные числа в директиву 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

Некоторое время назад я ответил на аналогичный вопрос, который может вам помочь. По сути, это немного 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>