Использование 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>