変数の使用と理解

Apache web サーバーや Dispatcher モジュール設定ファイルで変数の機能を活用する方法について説明します。

説明 description

環境

Adobe Experience Manager(AEM)

問題

このドキュメントでは、Apache web サーバーと Dispatcher モジュール設定ファイルで変数の機能を活用する方法について説明します。

変数

Apache は、Dispatcher モジュールの変数およびバージョン 4.1.9 以降をサポートしています。 これらを活用して、次の操作を実行できます。

  • 環境固有のものはすべて設定内でインライン化されず、開発環境の設定ファイルが実稼動環境で同じ機能出力で動作するように抽出されていることを確認する。
  • AMS から提供され、ユーザーが変更できない不変ファイルの機能を切り替えてログレベルを変更する。
  • RUNMODE および ENV_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
    ログレベル 整数値 単語の値
    トレース 4 trace
    デバッグ 3 debug
    情報 2 情報
    警告 1 警告
    エラー 0 error

    例 3 – 許可リスト

    変数 AUTHOR_WHITELIST_ENABLED および PUBLISH_WHITELIST_ENABLED1 に設定すると、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. 変数をどこに配置するか?
    Web サーバーの起動引数

    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
    
  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.d のファイルのインクルード順はアルファベット順なので、このグローバル .conf ファイルが取り込まれると、早い段階で取り込まれます。つまり、ファイル名の 000 は、ディレクトリ内の他のファイルよりも先に読み込まれることを保証します。

    include ステートメントでは、ファイル名に変数も使用します。 これは、変数の ENV_TYPERUNMODE の値によって、実際に読み込むファイルを変えることができます。

    ENV_TYPE の値が dev の場合、次のファイルが使用されます。

    /etc/httpd/conf.d/variables/sample-domain_domains_dev.vars

    ENV_TYPE の値が stage の場合、次のファイルが使用されます。

    /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 ファイルでは、開発でのみ動作していた通常の構文を置き換えることができます。

    code language-none
    <VirtualHost *:80>
    
      ServerName    dev.sample-domain.com
    
      ServerAlias    dev.sample-domain.net
    

    変数の機能を利用した新しい構文で、開発、ステージ、実稼働環境に対応します。

    code language-none
    <VirtualHost *:80>
    
      ServerName    ${SAMPLE_DOMAIN}
    
      ServerAlias    ${SAMPLE_ALT_DOMAIN}
    

    /etc/httpd/conf.dispatcher.d/vhosts/sample-domain_vhosts.any ファイルでは、開発でのみ動作していた通常の構文を置き換えることができます。

    code language-none
    "dev.sample-domain.com"
    "dev.sample-domain.net"
    

    変数の機能を利用した新しい構文で、開発、ステージ、実稼働環境に対応します。

    code language-none
    "${SAMPLE_DOMAIN}"
    "${SAMPLE_ALT_DOMAIN}"
    

    これらの変数は、環境ごとに異なるデプロイ済みのファイルを用意することなく、実行設定の個別化のために膨大な再利用が可能です。 基本的に、変数を使用して設定ファイルをテンプレート化し、変数に基づいてファイルをインクルードします。

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