Apache HTTP 伺服器 2.4 版
說明 | 於 Apache httpd 執行時期組態檔案中提供巨集 |
---|---|
狀態 | 基本 |
模組識別碼 | macro_module |
原始檔 | mod_macro.c |
相容性 | http 2.4.5 和更新版本中提供 |
於 Apache httpd 執行時期組態檔案中提供巨集,以便簡化建立許多類似組態區塊的程序。當伺服器啟動時,巨集會使用提供的參數加以擴充,結果會與組態檔案的其他部分一同處理。
巨集使用 <Macro>
區塊加以定義,其中包含組態中需要反覆操作的部分,以及需要替換的部分所使用的變數。
例如,您可能會使用一個巨集來定義 <VirtualHost>
區塊,以定義多個類似的虛擬主機
<Macro VHost $name $domain> <VirtualHost *:80> ServerName $domain ServerAlias www.$domain DocumentRoot "/var/www/vhosts/$name" ErrorLog "/var/log/httpd/$name.error_log" CustomLog "/var/log/httpd/$name.access_log" combined </VirtualHost> </Macro>
巨集名稱(類似於 httpd 組態指令)不分大小寫。但是,變數名稱則區分大小寫。
然後,您會執行此巨集多次以建立虛擬主機
Use VHost example example.com Use VHost myhost hostname.org Use VHost apache apache.org UndefMacro VHost
於伺服器啟動時間,這些 Use
呼叫中的每一個呼叫都會擴充為一個完整的虛擬主機,如 <Macro>
定義所述。
使用 UndefMacro
指令,以便稍後使用相同變數名稱的巨集不會造成定義衝突。
在範例區段中,下面可能會看到此範例的更精細版本。
參數名稱應以符號開頭,例如 $
、%
或 @
,以便清楚辨識,並有助於處理與其他指令的互動,例如核心指令 Define
。若未遵循這個原則,將會產生警告。儘管如此,建議您充分了解整個伺服器設定,以避免於不同範圍中重複使用相同的變數,進而造成混淆。
字首為 $
或 %
的參數不會經過跳脫處理。字首為 @
的參數會以引號跳脫。
避免使用包含另一個參數做為字首的參數(例如 $win
和 $winter
),因為在運算式評量時,可能會造成混淆。造成此類混淆時,將使用最長的參數名稱。
若想要在另一個字串中使用值,建議以大括號將參數括起來,以避免混淆。
<Macro DocRoot ${docroot}> DocumentRoot "/var/www/${docroot}/htdocs" </Macro>
的常見用法是產生動態產生的虛擬主機。mod_macro
## Define a VHost Macro for repetitive configurations <Macro VHost $host $port $dir> Listen $port <VirtualHost *:$port> ServerName $host DocumentRoot "$dir" # Public document root <Directory "$dir"> Require all granted </Directory> # limit access to intranet subdir. <Directory "$dir/intranet"> Require ip 10.0.0.0/8 </Directory> </VirtualHost> </Macro> ## Use of VHost with different arguments. Use VHost www.apache.org 80 /vhosts/apache/htdocs Use VHost example.org 8080 /vhosts/example/htdocs Use VHost www.example.fr 1234 /vhosts/example.fr/htdocs
建議您在使用巨集後,對其進行未定義。這個動作可避免於變數名稱可能產生衝突的複雜設定檔中產生混淆。
<Macro DirGroup $dir $group> <Directory "$dir"> Require group $group </Directory> </Macro> Use DirGroup /www/apache/private private Use DirGroup /www/apache/server admin UndefMacro DirGroup
說明 | 定義設定檔巨集 |
---|---|
語法 | <Macro name [par1 .. parN]> ... </Macro> |
脈絡 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_macro |
指令控制伺服器執行時間設定檔中的巨集定義。第一個參數是巨集的名稱。其他參數是巨集的參數。建議為參數名稱加上 '<Macro>
$%@
' 字首,且巨集名稱不得加上這些字元。
<Macro LocalAccessPolicy> Require ip 10.2.16.0/24 </Macro> <Macro RestrictedAccessPolicy $ipnumbers> Require ip $ipnumbers </Macro>
說明 | 取消巨集定義 |
---|---|
語法 | UndefMacro name |
脈絡 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_macro |
指令取消先前已定義的巨集。UndefMacro
UndefMacro LocalAccessPolicy UndefMacro RestrictedAccessPolicy
說明 | 使用巨集 |
---|---|
語法 | Use name [value1 ... valueN] |
脈絡 | 伺服器設定、虛擬主機、目錄 |
狀態 | 基本 |
模組 | mod_macro |
指令控制巨集的使用。指定的巨集會展開。必須提供與巨集定義中相同的參數數量。提供的值會與其對應的初始參數產生關聯,並會在處理前進行替換。Use
Use LocalAccessPolicy ... Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
與上述定義的巨集對應時,等於下列內容
Require ip 10.2.16.0/24 ... Require ip 192.54.172.0/24 192.54.148.0/24