使用和瞭解變數

說明 description

環境

Adobe Experience Manager

問題/症狀

本檔案將說明如何在Apache Web Server和Dispatcher模組設定檔案中運用變數的強大功能。

變數

Apache支援Dispatcher模組以上的變數和4.1.9版。 我們可以善用這些來執行下列作業:

  • 請確定任何特定於環境的內容並非內嵌在設定中,而是會解壓縮的,以確保來自開發環境的設定檔案可在生產環境中使用相同的功能輸出。
  • 切換功能並變更AMS提供且不允許您變更的不可變檔案的記錄層級。
  • 根據變數變更要使用的包含,例如 RUNMODEENV_TYPE
  • 在Apache設定和模組設定之間比對DocumentRoot和VirtualHost DNS名稱。

解決方法 resolution

  1. 使用基線變數
    由於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 error

    範例3 — 白名單

    變數 AUTHOR_WHITELIST_ENABLEDPUBLISH_WHITELIST_ENABLED 可設為1以參與重寫規則,包括根據IP位址允許或不允許一般使用者流量的規則。 若要在上切換此功能,需要結合建立白名單規則檔案並加以納入。

    以下是一些語法範例,說明變數如何啟用包含白名單檔案和白名單檔案的範例:

    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

  2. 變數的放置位置?

    網頁伺服器啟動引數

    AMS會將全域變數放在apache流程的啟動引數中在檔案內 /etc/sysconfig/httpd

    此檔案有預先定義的變數,如下所示:

    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)

    程式碼提供的自訂變數應位於目錄內的.vars檔案中 /etc/httpd/conf.d/variables/

    這些檔案可以有您想要的任何自訂變數。 以下是下列範例檔案的一些語法範例:

    建立您自己的變數時,檔案會根據其內容進行命名,並遵循手冊中提供的命名標準 此處. 在上述範例中,您可以看到變數檔案裝載不同的DNS專案,做為設定檔案中使用的變數。

    • /etc/httpd/conf.d/variables/weretail_domains_dev.vars:

      code language-none
      Define WERETAIL_DOMAIN dev.weretail.com
          Define WERETAIL_ALT_DOMAIN dev.weretail.net
      
    • /etc/httpd/conf.d/variables/weretail_domains_stage.vars:

      code language-none
      Define WERETAIL_DOMAIN stage.weretail.com
          Define WERETAIL_ALT_DOMAIN stage.weretail.net
      
    • /etc/httpd/conf.d/variables/weretail_domains_prod.vars:

      code language-none
      Define WERETAIL_DOMAIN www.weretail.com
          Define WERETAIL_ALT_DOMAIN www.weretail.net
      
  3. 使用變數
    現在您已定義變數檔案中的變數,您將想知道如何在其他設定檔案中正確使用變數。

    我們將使用以上範例.vars檔案來說明正確的使用案例。

    我們想要在整體上包含所有以環境為基礎的變數,我們將建立檔案 /etc/httpd/conf.d/000_load_env_vars.conf

    code 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_TYPERUNMODE

    當提取此全域.conf檔案時,將會提早提取,因為conf.d中的檔案包含順序是字母數字載入順序,檔案名稱中的平均值000將確保它先於目錄中的其他檔案載入。

    include陳述式也在檔案名稱中使用變數。 這可以根據中的值變更它將實際載入的檔案 ENV_TYPERUNMODE 變數。

    如果 ENV_TYPE 值為 開發 則要使用的檔案為:

    /etc/httpd/conf.d/variables/weretail_domains_dev.vars

    如果 ENV_TYPE 值為 階段 則要使用的檔案為:

    /etc/httpd/conf.d/variables/weretail_domains_stage.vars

    如果 RUNMODE 值為 預覽 則要使用的檔案為:

    /etc/httpd/conf.d/variables/weretail_domains_preview.vars

    包含該檔案後,我們將可使用儲存在中的變數名稱。

    在我們 /etc/httpd/conf.d/available_vhosts/weretail.vhost 檔案我們可以置換僅適用於dev的一般語法:

    code language-none
    VirtualHost *:80
    
      ServerName    dev.weretail.com
    
      ServerAlias    dev.weretail.net
    

    對於使用變數強大功能以用於dev、stage和prod的較新語法:

    code language-none
    VirtualHost *:80
    
      ServerName    ${WERETAIL_DOMAIN}
    
      ServerAlias    ${WERETAIL_ALT_DOMAIN}
    

    在我們 /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any 檔案我們可以置換僅適用於dev的一般語法:

    code language-none
    "dev.weretail.com"
    "dev.weretail.net"
    

    對於使用變數強大功能以用於dev、stage和prod的較新語法:

    code language-none
    "${WERETAIL_DOMAIN}"
    "${WERETAIL_ALT_DOMAIN}"
    

    這些變數重複使用相當多,以便個人化執行中的設定,而不需要為每個環境部署不同的檔案。 您基本上是使用變數將設定檔案範本化,並包含以變數為基礎的檔案。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f