組態檔說明 | AEM
說明 description
環境
Experience Manager
問題/症狀
本檔案將劃分並說明Adobe Managed Services中布建的標準內建Dispatcher伺服器中部署的每個設定檔案。 其使用、命名慣例等。
命名慣例
使用include或include選擇性陳述式鎖定檔案時,Apache Webserver實際上不在乎該檔案的副檔名是什麼。 以能消除衝突和混淆的名稱適當地命名它們會很有幫助。 使用的名稱將說明套用檔案的範圍,可讓工作更輕鬆。 如果所有專案都命名為.conf ,這會讓人感到非常困惑。 避免檔案和副檔名命名不當。
以下是典型AMS設定的Dispatcher中所使用的不同自訂副檔名和命名慣例清單。
包含在conf.d/ 中的檔案
<
檔案名稱>
.conf<
檔案名稱>
.vhost分段: /etc/httpd/conf.d/available_vhosts/
作用中:
/etc/httpd/conf.d/enabled_vhosts/
*注意: .vhost檔案不會複製到enabled_vhosts資料夾,而是使用符號連結指向available_vhosts/ .vhost檔案的相對路徑
<
VirtualHosts >
比對主機名稱的專案,並允許Apache使用不同規則處理每個網域流量。 從.vhost檔案,其他檔案,例如重寫、加入白名單等 已包括在內。<
檔案名稱>
_rewrite.rules*_rewrite.rules
檔案儲存mod_rewrite
規則,以由vhost檔案明確包含和使用<
檔案名稱>
_whitelist.rules包含在conf.modules.d/ 中的檔案
<
檔案名稱>
.any<
檔案名稱>
_farm.any暫存
:
/etc/httpd/conf.dispatcher.d/available_farms/
Active
:
/etc/httpd/conf.dispatcher.d/enabled_farms/
*注意:這些伺服器陣列檔案不會複製到enabled_farms資料夾,而是使用指向available_farms/_farm.any檔案相對路徑的符號連結
它會從dispatcher.any檔案依名稱自動包含這些檔案。
基準伺服器陣列檔案以000 開頭,以確保先載入它們。
自訂伺服器陣列檔案應該在100_開始編號配置之後載入,以確保適當的包含行為。
<
檔案名稱>
_filters.any<
檔案名稱>
_vhosts.any<
檔案名稱>
_cache.any<
檔案名稱>
_invalidate_allowed.any<
檔案名稱>
_clientheaders.any<
檔案名稱>
_renders.any已避免的問題
遵循命名慣例時,請避免某些容易犯錯的人,這些錯誤可能造成災難性的結果。 讓我們來介紹幾個範例。
問題範例
作為網站範例(如ExampleCo),兩個設定檔案是由Dispatcher設定的開發人員建立的。
/etc/httpd/conf.d/exampleco.conf
<VirtualHost *:80>
ServerName "exampleco"
ServerAlias "www.exampleco.com"
.......... SNIP ...............
<IfModule mod_rewrite.c>
ReWriteEngine on
LogLevel warn rewrite:trace1
Include /etc/httpd/conf.d/rewrites/exampleco.conf
</IfModule>
</VirtualHost>
/etc/httpd/conf.d/rewrites/exampleco.conf
RewriteRule /$ /content/exampleco/en.html [ PT,L]
RewriteRule /robots.txt$ /content/dam/exampleco/robots.txt [ PT,L]
潛在危險
A。檔案名稱相同。
如果不小心將vhost檔案放入rewrites資料夾,而將rewrites檔案放入vhosts資料夾。 檔案名稱似乎已正確部署,但Apache擲回錯誤,問題未立即顯示。
這通常如何變成問題?
如果將兩個檔案下載到相同的位置,它們可能會覆寫本身或使其無法區分,使部署過程變成噩夢。
B。檔案副檔名相同,且容易自動加入
檔案副檔名相同,且使用自動包含的副檔名,因此Apache會在許多預設資料夾中自動包含任何.conf檔案。
這通常會變成問題?
如果將副檔名為.conf的vhost檔案放在/etc/httpd/conf.d/資料夾中,它會嘗試將其載入Apache上的記憶體(通常正常),但如果將副檔名為.conf的重寫規則檔案放在/etc/httpd/conf.d/
資料夾中,則會自動包含並套用至全域,造成混淆和不需要的結果。
解決方法 resolution
根據檔案的操作,在安全離開自動包含規則名稱空間的情況下將其命名。
- 如果是虛擬主機檔案名稱,則以
.vhost
作為副檔名。 - 如果是重寫規則檔案,請以
<site>_rewrite.rules
作為尾碼和副檔名命名。 此命名慣例可清楚說明該網站用於哪個網站,且這是一組重寫規則。 - 如果是IP白名單規則檔案,請將其命名為
<description>_whitelist.rules
作為尾碼和副檔名。 此命名慣例會提供其用途的說明,並指出這是一組IP比對規則。
使用這些命名慣例可避免檔案被移動到其不所屬的自動包含目錄中時發生的問題。
例如,將名為.rules、.any或.vhost的檔案置於/etc/httpd/conf.d/
的自動包含資料夾中沒有任何效果。
如果部署變更請求顯示please deploy exampleco_rewrite.rules to production dispatchers
,則部署變更的人員可以知道他們並未新增新網站;他們只是更新檔案名稱所指示的重寫規則。
包含訂單
在Enterprise Linux上安裝的Apache Webserver中擴充功能與設定時,您有一些重要的 包含訂單,您將會想要瞭解這些訂單。
A. Apache基準線包含
Apache二進位檔以httpd.conf
開頭,對conf.d/*.conf
和conf.modules.d/*.conf
目錄執行includeoptional
。
如上圖所示,httpd二進位檔案只會將httpd.conf
檔案視為其組態檔。 該檔案包含下列陳述式:
Include conf.modules.d/*.conf
IncludeOptional conf.d/*.conf
B. AMS最上層包含
當我們套用標準時,我們新增了一些其他檔案型別,並包含我們自己的檔案型別。
以下是AMS基準目錄和最上層包含
以Apache的基準為基礎,我們顯示AMS如何為conf.d
個資料夾以及巢狀在/etc/httpd/conf.dispatcher.d/
下的模組特定目錄建立一些其他資料夾和頂層包含
當Apache載入時,它會拉入/etc/httpd/conf.modules.d/02-dispatcher.conf
,且該檔案包含二進位檔案/etc/httpd/modules/mod_dispatcher.so
,使其進入執行狀態。
LoadModule dispatcher_module modules/mod_dispatcher.so
若要在</VirtualHost>
中使用模組,我們將設定檔拖放至名為dispatcher_vhost.conf
的/etc/httpd/conf.d/
中,在此檔案中,您會看到使用設定模組運作所需的基本引數:
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d /dispatcher .any
...SNIP...
</IfModule>
如上所示,這包括最上層的dispatcher.any檔案,供我們的Dispatcher模組從/etc/httpd/conf.dispatcher.d/dispatcher.any
擷取其設定檔案
請注意此檔案的內容:
/farms {
$include "enabled_farms/*_farm.any"
}
最上層dispatcher.any檔案包含所有在/etc/httpd/conf.dispatcher.d/enabled_farms/
中且檔案名稱為<FILENAME>_farm.any
且遵循標準命名慣例的啟用伺服器陣列檔案。
稍後在先前提到的dispatcher_vhost.conf
檔案中,我們也會執行Include陳述式,以啟用每個在/etc/httpd/conf.d/enabled_vhosts/
中啟用的虛擬主機檔案(檔案名稱為<FILENAME>.vhost
),這些檔案會遵循我們的標準命名慣例。
IncludeOptional /etc/httpd/conf.d/enabled_vhosts/*.vhost
在每個.vhost檔案中,您會注意到Dispatcher模組已初始化為目錄的預設檔案處理常式。 以下是顯示語法的範例.vhost檔案:
<VirtualHost *:80>
ServerName "weretail"
ServerAlias www.weretail.com weretail.com
<Directory />
<IfModule disp_apache2.c>
....SNIP....
SetHandler dispatcher-handler
</IfModule>
....SNIP....
</Directory>
....SNIP....
</VirtualHost>
在頂層包含解析後,他們還有值得一提的其他子包含。 以下是有關陣列和vhosts檔案如何包含其他子元素的高階圖表
C. AMS虛擬主機包含
當來自/etc/httpd/conf.d/availabled_vhosts/
目錄的任何.vhost檔案被符號連結到/etc/httpd/conf.d/enabled_vhosts/
目錄時,它們將會在執行組態中使用。
.vhost檔案根據我們找到的常見片段而具有sub include。 變數、白名單和重寫規則等。
.vhost檔案會根據每個檔案需要包含在.vhost檔案中的位置,為其包含include陳述式。 以下是.vhost檔案的語法範例,作為良好的參考:
Include /etc/httpd/conf .d /variables/weretail .vars VirtualHost *:80
ServerName "${MAIN_DOMAIN}"
Directory / Include /etc/httpd/conf .d /whitelists/weretail *_whitelist.rules
IfModule disp_apache2.c
....SNIP....
SetHandler dispatcher-handler
/IfModule
....SNIP....
/Directory
....SNIP....
IfModule mod_rewrite.c
ReWriteEngine on
LogLevel warn rewrite:trace1
Include /etc/httpd/conf .d /rewrites/weretail_rewrite .rules
/IfModule /VirtualHost
如上面的範例所示,此設定檔案中需要納入的變數稍後會使用。
在檔案/etc/httpd/conf.d/variables/weretail.vars
內,我們可以看到已定義哪些變數:
Define MAIN_DOMAIN dev.weretail.com
您也會看到包含whitelist.rules檔案清單的一行,該清單會根據不同的白名單條件限制誰可檢視此內容。 讓我們檢視其中一個白名單檔案/etc/httpd/conf.d/whitelists/weretail_mainoffice_whitelist.rules
的內容:
<RequireAny>
Require ip 192.150.16.0/23
</RequireAny>
您也可以看到包含一組重寫規則的行。 讓我們看看weretail_rewrite.rules
檔案的內容:
RewriteRule /robots.txt$ /content/dam/weretail/robots.txt [ NC,PT]
RewriteCond %{SERVER_NAME} brand1.weretail.net [ NC]
RewriteRule /favicon.ico$ /content/dam/weretail/favicon.ico [ NC,PT]
RewriteCond %{SERVER_NAME} brand2.weretail.com [ NC]
RewriteRule /sitemap.xml$ /content/weretail/general/sitemap.xml [ NC,PT]
RewriteRule /logo.jpg$ /content/dam/weretail/general/logo.jpg [ NC,PT]
D. AMS伺服器陣列包含
當來自/etc/httpd/conf.dispatcher.d/available_farms/
目錄的任何<FILENAME>_farm.any
檔案被符號連結到/etc/httpd/conf.dispatcher.d/enabled_farms/
目錄時,它們將被用於執行組態中。
伺服器陣列檔案具有以伺服器陣列的最上層區段為基礎的子包含,例如快取、clientheaders、篩選器、轉譯器和vhosts。
<FILENAME>_farm.any
檔案會根據每個檔案需要包含在伺服器陣列檔案中的位置,為其包含include陳述式。 以下是<FILENAME>_farm.any
檔案的語法範例,作為良好參考:
/weretailfarm {
/clientheaders {
$include "/etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any"
$include "/etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any"
}
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any"
}
/renders {
$include "/etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any"
}
/filter {
$include "/etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any"
$include "/etc/httpd/conf.dispatcher.d/filters/weretail_search_filters.any"
}
....SNIP....
/cache {
....SNIP....
/rules {
$include "/etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any"
}
....SNIP....
/allowedClients {
/0000 {
/glob "*.*.*.*"
/type "deny"
}
$include "/etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any"
}
....SNIP....
}
}
您可以看到Weretail陣列的每個區段,沒有所需的所有語法,而是使用Include陳述式。
我們來看看其中幾個包含的語法,以瞭解每個子包含看起來像什麼/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any
:
"brand1.weretail.com"
"brand2.weretail.com"
"www.weretail.comf"
如您所見,這是應以換行方式分隔的網域名稱清單,應從此伺服器陣列呈現,而不是其他伺服器陣列。
接下來,讓我們檢視/etc/httpd/conf.dispatcher.d/filters/weretail_search_filters.any
:
/400 { /type "allow" /method "GET" /path "/bin/weretail/lists/*" /extension "json" }
/401 { /type "allow" /method "POST" /path "/bin/weretail/search/" /extension "html" }