Apache-2.2

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

  • November 22, 2009

該腳本應該從 *.domain.com 中取出 *,將其分配給 $ subdomain variable, and $ 應將子域放入 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 fio@domain.com
# 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> 

我最初的猜測是你已經通過PerlHeaderParserHandler你被交給的鉤子$r或請求對象設置了一個處理程序。

AssignUserId(您要動態配置的參數)的文件中,配置的上下文必須是 virtual-host。猜測我會懷疑這意味著您應該基於每個伺服器而不是基於每個請求進行配置。

請參閱$s->add_config文件,而不是$r->add_config.

取決於指令的處理,當請求掛鉤被呼叫時,AssignUserId 的處理可能已經發生,在這種情況下,除了將每個子域靜態配置為虛擬伺服器之外,您無能為力。

更新 1:當然,如果您嘗試$s->add_config對每個請求都使用,那麼您會冒著在記憶體中擁有笨拙的伺服器配置的危險,並且一遍又一遍地重複相同的指令。使每個請求都更新伺服器配置不切實際。

也許仍然可以使用 來執行此操作$r-&gt;add_config(),從文件中註意到“配置指令的處理就像在 <Location> 塊中給出一樣”。您是否嘗試過將 AssignUserId 參數放在 <Location> 塊中的非 Perl 測試?

引用自:https://serverfault.com/questions/87178