使用和瞭解變數
瞭解如何在Apache Web Server和Dispatcher模組設定檔案中運用變數的強大功能。
說明 description
環境
Adobe Experience Manager (AEM)
問題
本檔案將說明如何在Apache Web Server和Dispatcher模組設定檔案中運用變數的強大功能。
變數
Apache支援Dispatcher模組以上的變數和4.1.9版。 我們可以善用這些來執行下列作業:
- 請確定任何特定於環境的內容並非內嵌在設定中,而是會解壓縮的,以確保來自開發環境的設定檔案可在生產環境中使用相同的功能輸出。
- 切換功能並變更AMS提供且不允許您變更的不可變檔案的記錄層級。
- 根據變數(如
RUNMODE和ENV_TYPE)變更要使用的包含。 - 在Apache設定和模組設定之間比對DocumentRoot和VirtualHost DNS名稱。
解決方法 resolution
-
使用基線變數
由於AMS基準檔案是唯讀且不可變的,因此有些功能可以切換或開啟,也可以透過編輯它們使用的變數來設定。基線變數
以下是檔案
/etc/httpd/conf.d/variables/ams_default.vars內容的範例code language-none Define DISP_LOG_LEVEL info Define AUTHOR_WHITELIST_ENABLED 0 Define PUBLISH_WHITELIST_ENABLED 0 Define AUTHOR_FORCE_SSL 1 Define PUBLISH_FORCE_SSL 0範例1 — 強制SSL
上述
AUTHOR_FORCE_SSL或PUBLISH_FORCE_SSL所示的變數可設為1,以參與重寫規則,強制一般使用者在收到http要求時重新導向至https。以下是允許此切換運作的設定檔案語法:
code language-none <VirtualHost *:80> <IfModule mod_rewrite.c> ReWriteEngine on <If "${PUBLISH_FORCE_SSL} == 1"> Include /etc/httpd/conf.d/rewrites/forcessl_rewrite.rules </If> </IfModule> </VirtualHost>如您所見,重寫規則包括的程式碼會重新導向一般使用者瀏覽器,但設定為1的變數會允許使用或不使用檔案。
範例2 — 記錄層級
變數
DISP_LOG_LEVEL可用來設定您想讓實際用於執行組態中的記錄層級使用的變數。以下是ams基準組態檔案中的語法範例:
code language-none <IfModule disp_apache2.c> DispatcherLog logs/dispatcher.log DispatcherLogLevel ${DISP_LOG_LEVEL} </IfModule>如果您需要增加Dispatcher記錄層級,只需將
ams_default.vars變數DISP_LOG_LEVEL更新為您想要的層級。範例值可以是整數或單字:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 記錄層級 整數值 Word值 追蹤 4 trace 偵錯 3 偵錯 資訊 2 資訊 警告 1 警告 錯誤 0 錯誤 範例3 — 白名單
變數
AUTHOR_WHITELIST_ENABLED和PUBLISH_WHITELIST_ENABLED可設為 1,以參與包含允許或禁止以IP位址為基礎的一般使用者流量的規則的重寫規則。 切換此功能 ON 需要結合建立白名單規則檔案才能包含它。以下是一些語法範例,說明變數如何啟用包含白名單檔案和白名單檔案的範例:
sample.vhost:
code language-none <VirtualHost *:80> <Directory /> <If "${AUTHOR_WHITELIST_ENABLED} == 1"> Include /etc/httpd/conf.d/whitelists/*_whitelist.rules </If> </Directory> </VirtualHost>sample_whitelist.rules:
code language-none <RequireAny> Require ip 10.43.0.10/24 </RequireAny>如您所見,
sample_whitelist.rules強制執行IP限制,但切換變數可將其納入sample.vhost -
變數的放置位置?
網頁伺服器啟動引數AMS會將全域變數放在
/etc/sysconfig/httpd檔案內的apache處理序啟動引數中此檔案有預先定義的變數,如下所示:
code language-none AUTHOR_IP="10.43.0.59" AUTHOR_PORT="4502" AUTHOR_DOCROOT='/mnt/var/www/author' PUBLISH_IP="10.43.0.20" PUBLISH_PORT="4503" PUBLISH_DOCROOT='/mnt/var/www/html' ENV_TYPE='dev' RUNMODE='dev'您無法變更這些設定,但可在設定檔案中妥善運用。
注意 — 因為此檔案僅在服務啟動時包括在內。 必須重新啟動服務才能取得變更。 這表示重新載入是不夠的,而是需要重新啟動。
變數檔案(.vars)
程式碼提供的自訂變數應位於目錄
/etc/httpd/conf.d/variables/內的.vars檔案中這些檔案可以有您想要的任何自訂變數。 以下是下列範例檔案的一些語法範例:
建立您自己的變數時,檔案會根據變數的內容來命名,並遵循手冊此處提供的命名標準。 在上述範例中,您可以看到變數檔案裝載不同的DNS專案,做為設定檔案中使用的變數。
/etc/httpd/conf.d/variables/sample-domain_domains_dev.vars:
code language-none Define SAMPLE_DOMAIN dev.sample-domain.com Define SAMPLE_ALT_DOMAIN dev.sample-domain.net/etc/httpd/conf.d/variables/sample-domain_domains_stage.vars:
code language-none Define SAMPLE_DOMAIN stage.sample-domain.com Define SAMPLE_ALT_DOMAIN stage.sample-domain.net/etc/httpd/conf.d/variables/sample-domain_domains_prod.vars:
code language-none Define SAMPLE_DOMAIN www.sample-domain.com Define SAMPLE_ALT_DOMAIN www.sample-domain.net -
使用變數
現在您已定義變數檔案中的變數,您將想知道如何在其他設定檔案中正確使用變數。我們將使用以上範例.vars檔案來說明正確的使用案例。
我們要將所有基於環境的變數納入全域,我們將建立檔案
/etc/httpd/conf.d/000_load_env_vars.confcode language-none Include /etc/httpd/conf.d/variables/*_${ENV_TYPE}.vars Include /etc/httpd/conf.d/variables/*_${RUNMODE}.vars我們知道,當httpd服務啟動時,它會提取AMS在
/etc/sysconfig/httpd中設定的變數,並具有變數集ENV_TYPE和RUNMODE當提取此全域.conf檔案時,將會提早提取,因為conf.d中的檔案包含順序是字母數字載入順序,檔案名稱中的平均值000將確保它先於目錄中的其他檔案載入。
include陳述式也在檔案名稱中使用變數。 這可以根據
ENV_TYPE和RUNMODE變數中的值來變更它將實際載入的檔案。如果
ENV_TYPE值為 dev,則要使用的檔案為:/etc/httpd/conf.d/variables/sample-domain_domains_dev.vars如果
ENV_TYPE值是 階段,則要使用的檔案是:/etc/httpd/conf.d/variables/sample-domain_domains_stage.vars如果
RUNMODE值為 preview,則要使用的檔案為:/etc/httpd/conf.d/variables/sample-domain_domains_preview.vars包含該檔案後,我們將可使用儲存在中的變數名稱。
在
/etc/httpd/conf.d/available_vhosts/sample-domain.vhost檔案中,我們可以置換僅適用於dev的一般語法:code language-none <VirtualHost *:80> ServerName dev.sample-domain.com ServerAlias dev.sample-domain.net對於使用變數強大功能以用於dev、stage和prod的較新語法:
code language-none <VirtualHost *:80> ServerName ${SAMPLE_DOMAIN} ServerAlias ${SAMPLE_ALT_DOMAIN}在
/etc/httpd/conf.dispatcher.d/vhosts/sample-domain_vhosts.any檔案中,我們可以置換僅適用於dev的一般語法:code language-none "dev.sample-domain.com" "dev.sample-domain.net"對於使用變數強大功能以用於dev、stage和prod的較新語法:
code language-none "${SAMPLE_DOMAIN}" "${SAMPLE_ALT_DOMAIN}"這些變數重複使用相當多,以便個人化執行中的設定,而不需要為每個環境部署不同的檔案。 您基本上是使用變數將設定檔案範本化,並包含以變數為基礎的檔案。