ドキュメントでは、ロックされていて変更できないファイルはどれか、および目的の設定を適切に行う方法について説明します。
理由
AMS ではシステムをプロビジョニングする際、すべてが機能し、安全になるベースライン設定を段階的に導入します。AMS では、これらを機能性やセキュリティのベースラインとして残しておきたいと考えていません。これを実現するために、一部のファイルは変更を防ぐよう、読み取り専用および不変としてマークされます。
レイアウトでは、動作の変更や必要な変更の上書きを防ぐことはできません。これらのファイルを変更する代わりに、元のファイルを置き換える独自のファイルをオーバーレイします。
これにより、AMS が最新の修正とセキュリティ強化を含む Dispatcher にパッチを適用しても、ファイルは変更されません。そのため、改善点のメリットを活用し、必要な変更のみを導入できます。
上の図で示すように、不変ファイルは、ゲームの進行を止めるものではありません。不変ファイルは、プレーヤーのパフォーマンスが損なわれないように、レーン内にとどまらせる作用があります。このメソッドでは、次の主要な機能を利用できます。
- カスタマイズは、独自の安全なスペースで処理されます
- カスタム変更のオーバーレイは、AEM のオーバーレイメソッドのオーバーレイを反映します
- カスタマイズを変更することなく、AMS 設定のパッチを適用できます
- 基本インストールとカスタマイズされた設定のテストを同時に実行することで、問題がカスタマイズに起因するものなのか、それとも別の原因があるのかを判断できます。
対象となるファイル
Dispatcher と共にデプロイされる一般的なファイルのリストは次のとおりです。
/etc/httpd/ ├── conf │ └── httpd.conf ├── conf.d │ ├── available_vhosts │ │ ├── 000_unhealthy_author.vhost │ │ ├── 000_unhealthy_publish.vhost │ │ ├── aem_author.vhost │ │ ├── aem_flush.vhost │ │ ├── aem_health.vhost │ │ ├── ams_lc.vhost │ │ └── aem_publish.vhost │ ├── dispatcher_vhost.conf │ ├── enabled_vhosts │ │ ├── aem_author.vhost -> /etc/httpd/conf.d/available_vhosts/aem_author.vhost │ │ ├── aem_flush.vhost -> /etc/httpd/conf.d/available_vhosts/aem_flush.vhost │ │ ├── aem_health.vhost -> /etc/httpd/conf.d/available_vhosts/aem_health.vhost │ │ └── aem_publish.vhost -> /etc/httpd/conf.d/available_vhosts/aem_publish.vhost │ ├── logformat.conf │ ├── remoteip.conf │ ├── rewrites │ │ ├── base_rewrite.rules │ │ └── xforwarded_forcessl_rewrite.rules │ ├── security.conf │ ├── variables │ │ ├── ootb.vars │ │ └── ams_default.vars │ └── whitelists │ └── 000_base_whitelist.rules ├── conf.dispatcher.d │ ├── available_farms │ │ ├── 000_ams_catchall_farm.any │ │ ├── 001_ams_author_flush_farm.any │ │ ├── 001_ams_publish_flush_farm.any │ │ ├── 002_ams_author_farm.any │ │ ├── 002_ams_lc_farm.any │ │ └── 002_ams_publish_farm.any │ ├── cache │ │ ├── ams_author_cache.any │ │ ├── ams_author_invalidate_allowed.any │ │ ├── ams_publish_cache.any │ │ └── ams_publish_invalidate_allowed.any │ ├── clientheaders │ │ ├── ams_author_clientheaders.any │ │ ├── ams_common_clientheaders.any │ │ ├── ams_lc_clientheaders.any │ │ └── ams_publish_clientheaders.any │ ├── dispatcher.any │ ├── enabled_farms │ │ ├── 000_ams_catchall_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/000_ams_catchall_farm.any │ │ ├── 001_ams_author_flush_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/001_ams_author_flush_farm.any │ │ ├── 001_ams_publish_flush_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/001_ams_publish_flush_farm.any │ │ ├── 002_ams_author_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/002_ams_author_farm.any │ │ └── 002_ams_publish_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/002_ams_publish_farm.any │ ├── filters │ │ ├── ams_author_filters.any │ │ ├── ams_lc_filters.any │ │ └── ams_publish_filters.any │ ├── renders │ │ ├── ams_author_renders.any │ │ ├── ams_lc_renders.any │ │ └── ams_publish_renders.any │ └── vhosts │ ├── ams_author_vhosts.any │ ├── ams_lc_vhosts.any │ └── ams_publish_vhosts.any ├── conf.modules.d │ ├── 01-cgi.conf │ └── 02-dispatcher.conf └── modules -> ../../usr/lib64/httpd/modules └── mod_dispatcher.so
不変ファイルを判断するには、Dispatcher で次のコマンドを実行して確認できます。
$ lsattr -Rl /etc/httpd 2>/dev/null | grep Immutable
不変ファイルに対する応答のサンプルは次のとおりです。
/etc/httpd/conf/httpd.conf Immutable /etc/httpd/conf.d/available_vhosts/aem_author.vhost Immutable /etc/httpd/conf.d/available_vhosts/aem_publish.vhost Immutable /etc/httpd/conf.d/available_vhosts/aem_lc.vhost Immutable /etc/httpd/conf.d/available_vhosts/aem_flush.vhost Immutable /etc/httpd/conf.d/available_vhosts/aem_health.vhost Immutable /etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost Immutable /etc/httpd/conf.d/available_vhosts/000_unhealthy_publish.vhost Immutable /etc/httpd/conf.d/rewrites/base_rewrite.rules Immutable /etc/httpd/conf.d/rewrites/xforwarded_forcessl_rewrite.rules Immutable /etc/httpd/conf.d/whitelists/000_base_whitelist.rules Immutable /etc/httpd/conf.d/dispatcher_vhost.conf Immutable /etc/httpd/conf.d/logformat.conf Immutable /etc/httpd/conf.d/security.conf Immutable /etc/httpd/conf.modules.d/02-dispatcher.conf Immutable /etc/httpd/conf.dispatcher.d/available_farms/000_ams_catchall_farm.any Immutable /etc/httpd/conf.dispatcher.d/available_farms/001_ams_author_flush_farm.any Immutable /etc/httpd/conf.dispatcher.d/available_farms/001_ams_publish_flush_farm.any Immutable /etc/httpd/conf.dispatcher.d/available_farms/002_ams_author_farm.any Immutable /etc/httpd/conf.dispatcher.d/available_farms/002_ams_lc_farm.any Immutable /etc/httpd/conf.dispatcher.d/available_farms/002_ams_publish_farm.any Immutable /etc/httpd/conf.dispatcher.d/cache/ams_author_cache.any Immutable /etc/httpd/conf.dispatcher.d/cache/ams_author_invalidate_allowed.any Immutable /etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any Immutable /etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any Immutable /etc/httpd/conf.dispatcher.d/clientheaders/ams_author_clientheaders.any Immutable /etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any Immutable /etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any Immutable /etc/httpd/conf.dispatcher.d/clientheaders/ams_lc_clientheaders.any Immutable /etc/httpd/conf.dispatcher.d/filters/ams_author_filters.any Immutable /etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any Immutable /etc/httpd/conf.dispatcher.d/filters/ams_lc_filters.any Immutable /etc/httpd/conf.dispatcher.d/renders/ams_author_renders.any Immutable /etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any Immutable /etc/httpd/conf.dispatcher.d/renders/ams_lc_renders.any Immutable /etc/httpd/conf.dispatcher.d/vhosts/ams_author_vhosts.any Immutable /etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any Immutable /etc/httpd/conf.dispatcher.d/vhosts/ams_lc_vhosts.any Immutable /etc/httpd/conf.dispatcher.d/dispatcher.any Immutable
変更方法
変数
変数を使用すると、設定ファイル自体を変更せずに、機能的な変更を行うことができます。設定の特定の要素は、変数の値を調整して変更できます。ファイル /etc/httpd/conf.d/dispatcher_vhost.conf から強調表示できる例の一つを次に示します。
Include /etc/httpd/conf.d/variables/ams_default.vars <IfModule disp_apache2.c> DispatcherConfig conf.dispatcher.d/dispatcher.any DispatcherLog logs/dispatcher.log DispatcherLogLevel ${DISP_LOG_LEVEL} DispatcherDeclineRoot 0 DispatcherUseProcessedURL 1 </IfModule>
DispatcherLogLevel ディレクティブには、通常の値の代わりに DISP_LOG_LEVEL 変数を使用していることを確認してください。コードのこのセクションの上には、変数ファイルに対する include ステートメントも表示されます。次に、 変数ファイル /etc/httpd/conf.d/variables/ams_default.vars を確認します。その変数ファイルの内容を次に示します。
Define DISP_LOG_LEVEL info Define AUTHOR_WHITELIST_ENABLED 0 Define PUBLISH_WHITELIST_ENABLED 0 Define LIVECYCLE_WHITELIST_ENABLED 0 Define AUTHOR_FORCE_SSL 1 Define PUBLISH_FORCE_SSL 0 Define LIVECYCLE_FORCE_SSL 1
DISP_LOG_LEVEL 変数の現在の値が info である場合。これをトレースやデバッグ、または選択した数値/レベルに調節できます。これでログレベルを制御するすべての箇所が、自動的に調整されるようになります。
オーバーレイメソッド
上位レベルのインクルードファイルについて理解しておいてください。カスタマイズを開始するには、これらを使用する必要があります。簡単な例から始めましょう。この Dispatcher を指す新しいドメイン名を追加するシナリオがあります。ドメインの例として、we-retail.adobe.com を使用します。 まず、既存の設定ファイルを新しい設定ファイルにコピーし、そこで変更を加えます。
$ cp /etc/httpd/conf.d/available_vhosts/aem_publish.vhost /etc/httpd/conf.d/available_vhosts/weretail_publish.vhost
既存の aem_publish.vhost ファイルをコピーしたのは、動作させるために必要なものが既に含まれており、ここからすぐに開始できるためです。次に、新しい weretail.vhost ファイルを編集し、必要な変更を加えます。
変更前:
<VirtualHost *:80> ServerName publish ServerAlias ${PUBLISH_DEFAULT_HOSTNAME} DocumentRoot ${PUBLISH_DOCROOT} <IfModule mod_headers.c> Header always add X-Dispatcher ${DISP_ID} Header always add X-Vhost "publish" Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'" Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'" Header append Vary User-Agent env=!dont-vary </IfModule> ....... SNIP....... </VirtualHost>
変更後:
<VirtualHost *:80> ServerName weretail-publish ServerAlias we-retail.adobe.com DocumentRoot ${PUBLISH_DOCROOT} <IfModule mod_headers.c> Header always add X-Dispatcher ${DISP_ID} Header always add X-Vhost "werteail-publish" Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'" Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'" Header append Vary User-Agent env=!dont-vary </IfModule> ....... SNIP....... </VirtualHost>
これで、新しいドメイン名に一致するように ServerName と ServerAlias を更新したほか、他のパンくずヘッダーも更新しました。次に、新しいファイルを有効にして、新しいファイルを使用することを Apache に伝えます。
$ cd /etc/httpd/conf.d/enabled_vhosts/; ln -s ../available_vhosts/weretail_publish.vhost .
これで、ドメインがトラフィックの生成対象であることを Apache web サーバーが認識しますが、さらに、新しいドメイン名に従うべきことを Dispatcher モジュールに知らせる必要があります。まず、新しい *_vhost.any ファイル /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any を作成し、そのファイル内に、受け入れたいドメイン名を配置します。
「we-retail.adobe.com」
次に、新しい vhost エントリファイルを使用する新しいファームファイルを作成する必要があります。まず、強力な開始ファイルを新しいファイルにコピーします。
$ cp /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any /etc/httpd/conf.dispatcher.d/available_farms/400_weretail_publish_farm.any
このファームファイルに加える必要のある変更を示します
変更前:
/publishfarm { /virtualhosts { $include "/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any" } ........SNIP......... }
変更後:
/weretailpublishfarm { /virtualhosts { $include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any" } ........SNIP......... }
これで、ファーム名を更新し、ファーム設定の /virtualhosts セクションで使用するインクルード指示も更新しました。この新しいファームファイルを有効にして、実行中の設定で使用できるようにする必要があります。
$ cd /etc/httpd/conf.dispatcher.d/enabled_farms/; ln -s ../available_farms/400_weretail_publish_farm.any .
Web サーバーサービスを再読み込みし、新しいドメインを使用します。
必要な部分のみを変更し、ベースライン設定ファイルに記載の既存のインクルード指示とコードを活かしていることに注意してください。変更する必要がある要素を詳細に記述するだけです。これにより作業がはるかに簡素化され、保守対象のコードを減らすことができます。