2012-06-20 38 views
0

我已經建立了一個apache服務器,並且這個apache服務器指向了一堆虛擬主機。全局定義部分虛擬主機定義以減少冗餘

的virtualhosts的定義如下所示,

<VirtualHost *:80> 
     ServerName <url> 

     RewriteEngine on 
     ReWriteCond %{SERVER_PORT} !^443$ 
     RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 

     # Enable client-side caching of resources 
     ExpiresActive On 
     ExpiresByType image/png "now plus 48 hours" 
     ExpiresByType image/jpeg "now plus 48 hours" 
     ExpiresByType image/gif "now plus 48 hours" 
     ExpiresByType application/javascript "now plus 48 hours" 
     ExpiresByType application/x-javascript "now plus 48 hours" 
     ExpiresByType text/javascript "now plus 48 hours" 
     ExpiresByType text/css "now plus 48 hours" 

</VirtualHost> 

. 
. 
. 

<VirtualHost *:80> 
     ServerName <url> 

     RewriteEngine on 
     ReWriteCond %{SERVER_PORT} !^443$ 
     RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 

     # Enable client-side caching of resources 
     ExpiresActive On 
     ExpiresByType image/png "now plus 48 hours" 
     ExpiresByType image/jpeg "now plus 48 hours" 
     ExpiresByType image/gif "now plus 48 hours" 
     ExpiresByType application/javascript "now plus 48 hours" 
     ExpiresByType application/x-javascript "now plus 48 hours" 
     ExpiresByType text/javascript "now plus 48 hours" 
     ExpiresByType text/css "now plus 48 hours" 

</VirtualHost> 

我有一噸的類似於上面所示的示例虛擬主機定義。

由於除ServerName以外的大多數定義都是相同的,所以我想知道是否有辦法在全局範圍內定義這些通用定義。

我是新來的Apache配置,我覺得隨着虛擬主機定義數量的增加,我的配置文件變得更長和冗餘。

回答

0

你有幾個選擇。首先,根據您要使用的指令,它可能是您可以在服務器級別添加的內容。

其次,有一個名爲mod_macro的模塊,專門用於此用例。您可以定義一個宏爲您的虛擬主機:

<Macro VHost $host $port $dir> 
    Listen $port 
    <VirtualHost *:$port> 
    ServerName $host 
    DocumentRoot $dir 

    <Directory $dir> 
     # do something here... 
    </Directory> 

    # etc etc etc 

    </VirtualHost> 
</Macro> 

,然後調用它像這樣:

Use VHost www.apache.org 80 /projects/apache/web 

你也可以聲明宏僅供Exipres指令,並通過調用

包括它
Use ExpireMacro 

在您的虛擬主機中。

我使用mod_macro,它工作的很好,這是一個簡化你的apache配置的好方法。

編輯:我應該提到,除非模塊已經在你的服務器上,否則你需要編譯並安裝它,這意味着你需要root權限。

+0

我從您與我共享的文檔中下載並提取了「mod_macro-1.2.1」。 我提取它並執行「apxs -cia /mod_macro.c」,這給了我以下錯誤無法打開/usr/lib64/httpd/build/config_vars.mk:在/ usr/sbin/apxs行沒有這樣的文件或目錄201. – user1428900

+0

爲了克服這個問題我安裝了「apr-devel」和「httpd-devel」,我仍然遇到錯誤。你有什麼機會知道安裝mod_macro的其他方式嗎? – user1428900

+0

看起來它可能可以作爲一個RPM --s見http://rpmfind.net/linux/rpm2html/search.php?query=apache-mod_macro否則,你可以讓我知道實際的錯誤? – muffinista