<-
Apache > HTTP 伺服器 > 文件 > 2.4 版 > 模組

Apache 模組 mod_macro

提供的語言:  en  |  fr 

說明於 Apache httpd 執行時期組態檔案中提供巨集
狀態基本
模組識別碼macro_module
原始檔mod_macro.c
相容性http 2.4.5 和更新版本中提供

摘要

於 Apache httpd 執行時期組態檔案中提供巨集,以便簡化建立許多類似組態區塊的程序。當伺服器啟動時,巨集會使用提供的參數加以擴充,結果會與組態檔案的其他部分一同處理。

Support Apache!

主題

指令

Bug 修復檢查清單

另請參閱

top

用法

巨集使用 <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 指令,以便稍後使用相同變數名稱的巨集不會造成定義衝突。

在範例區段中,下面可能會看到此範例的更精細版本。

top

提示

參數名稱應以符號開頭,例如 $%@,以便清楚辨識,並有助於處理與其他指令的互動,例如核心指令 Define。若未遵循這個原則,將會產生警告。儘管如此,建議您充分了解整個伺服器設定,以避免於不同範圍中重複使用相同的變數,進而造成混淆。

字首為 $% 的參數不會經過跳脫處理。字首為 @ 的參數會以引號跳脫。

避免使用包含另一個參數做為字首的參數(例如 $win$winter),因為在運算式評量時,可能會造成混淆。造成此類混淆時,將使用最長的參數名稱。

若想要在另一個字串中使用值,建議以大括號將參數括起來,以避免混淆。

<Macro DocRoot ${docroot}>
    DocumentRoot "/var/www/${docroot}/htdocs"
</Macro>
top

範例

虛擬主機定義

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
top

<Macro> 指令

說明定義設定檔巨集
語法<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>
top

UndefMacro 指令

說明取消巨集定義
語法UndefMacro name
脈絡伺服器設定、虛擬主機、目錄
狀態基本
模組mod_macro

UndefMacro 指令取消先前已定義的巨集。

UndefMacro LocalAccessPolicy
UndefMacro RestrictedAccessPolicy
top

Use 指令

說明使用巨集
語法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

提供的語言:  en  |  fr 

top

留言

注意
這不是問答區段。放於此處的評論應針對如何改善文件或伺服器提出建議,若已被實施或被認為無效或離題,可能會被我們的管理員移除。有關如何管理 Apache HTTP 伺服器問題應導向 Libera.chat 上的 IRC 頻道 #httpd 或傳送至我們的郵件列表