変数の使用と理解
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
-
ベースライン変数の使用
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_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に含めることができます。 -
変数をどこに配置するか?
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 -
変数の使用
これで変数を変数ファイル内で定義したので、他の設定ファイル内での変数の適切な使用方法を説明します。上記の.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}.varshttpd サービスが起動すると AMS が設定した変数を
/etc/sysconfig/httpdで取り込み、ENV_TYPEとRUNMODEの変数セットを持つことが分かっています。conf.d のファイルのインクルード順はアルファベット順なので、このグローバル .conf ファイルが取り込まれると、早い段階で取り込まれます。つまり、ファイル名の 000 は、ディレクトリ内の他のファイルよりも先に読み込まれることを保証します。
include ステートメントでは、ファイル名に変数も使用します。 これは、変数の
ENV_TYPEとRUNMODEの値によって、実際に読み込むファイルを変えることができます。ENV_TYPEの値が dev の場合、次のファイルが使用されます。/etc/httpd/conf.d/variables/sample-domain_domains_dev.varsENV_TYPEの値が stage の場合、次のファイルが使用されます。/etc/httpd/conf.d/variables/sample-domain_domains_stage.varsRUNMODEの値が 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}"これらの変数は、環境ごとに異なるデプロイ済みのファイルを用意することなく、実行設定の個別化のために膨大な再利用が可能です。 基本的に、変数を使用して設定ファイルをテンプレート化し、変数に基づいてファイルをインクルードします。