26.2. 設定 Apache

在 SUSE Linux 中執行 Apache 時,可以使用下面兩種方法進行設定:透過 YaST 或是手動設定。手動設定組態可以提供較詳細的設定,但是缺乏 YaST GUI 提供的方便性。

[Important]組態變更

大部分 Apache 組態值在變更之後,必須等到 Apache 重新啟動或是重新載入才能生效。如果是透過 YaST 完成組態設定,而且HTTP 服務已經核取啟用,這些設定就會自動生效。如需有關手動重新啟動的詳細資訊,請參閱節 26.3, "啟動和停止 Apache"。大多數組態變更時只需要執行 rcapache2 reload 重新載入。

26.2.1. 手動設定 Apache

手動設定 Apache 是指透過 root 使用者身份來編輯純文字組態檔案。

26.2.1.1. 組態檔案

您可以在下列兩個不同位置找到 Apache 組態檔案:

  • /etc/sysconfig/apache2

  • /etc/apache2/

26.2.1.1.1. /etc/sysconfig/apache2

/etc/sysconfig/apache2 可控制部分的 Apache 全域設定,例如要載入的模組、要包含 (Include) 的其他組態檔案、伺服器應該啟動的旗標,以及應該加入到指令行的旗標。在這個檔案中的每個組態選項都會詳細加以說明,因此本文將不予以介紹。針對一般用途的網頁伺服器,在 /etc/sysconfig/apache2 中的設定應該可以符合任何組態需求。

[Important]沒有 Apache 適用的 SuSEconfig 模組

SUSE Linux 已經移除 Apache 適用的 SuSEconfig 模組。變更 /etc/sysconfig/apache2 之後,不再需要執行 SuSEconfig

26.2.1.1.2. /etc/apache2/

/etc/apache2/ 代管了 Apache 的所有組態檔案。接下來的段落將說明每個檔案的用途。每個檔案都包含了幾項組態設定選項 (又稱為指示詞)。在這些檔案中的每個組態選項都會詳加說明,因此本文將不予以介紹。

Apache 組態檔案的組織方式如下:

/etc/apache2/
 |
 |- charset.conv 
 |- conf.d/
 |   |
 |   |- *.conf
 |
 |- default-server.conf
 |- errors.conf
 |- httpd.conf
 |- listen.conf
 |- magic
 |- mime.types
 |- mod_*.conf
 |- server-tuning.conf
 |- ssl-global.conf
 |- ssl.*
 |- sysconfig.d
 |   |
 |   |- global.conf
 |   |- include.conf
 |   |- loadmodule.conf . .
 |
 |- uid.conf
 |- vhosts.d
 |   |- *.conf
     

在 /etc/apache2/ 中的 Apache 組態檔案

charset.conv

指定不同語言所要使用的字元集。請勿進行編輯。

conf.d/*.conf

組態檔案是由其他模組加入。這些組態檔案可以依實際需要包含 (Include) 至虛擬主機組態。如需參考範例,請參閱 vhosts.d/vhost.template。若要執行這個動作,您可以為不同的虛擬主機提供不同的模組組合。

default-server.conf

根據合理預設值設定所有虛擬主機的全域組態。這時不是變更組態值,而是採用虛擬主機組態覆寫組態值。

errors.conf

定義 Apache 處理錯誤的方式。若要自訂這些發給所有虛擬主機的訊息,請編輯這個檔案。另外一種方法是覆寫虛擬主機組態中的這些指示詞。

httpd.conf

主要的 Apache 伺服器組態檔案。請避免變更這個檔案。它主要包含 Include 陳述式和全域設定。分別為這裡列出的每個組態檔案覆寫全域設定。變更虛擬主機組態的主機特定設定 (例如文件根目錄)。

listen.conf

繫結 Apache 至特定的 IP 位址和連接埠。這裡也可以設定以名稱為基礎之虛擬主機的組態 (請參閱節 26.2.1.2.1, "以名稱為基礎的虛擬主機")。

magic

mime_magic 模組的資料,此模組可協助 Apache 自動判斷不明檔案的 MIME 類型。請勿進行變更。

mime.types

系統已知的 MIME 類型 (實際上是 /etc/mime.types 的連結)。請勿進行編輯。如果您需要新增這裡未列出的 MIME 類型,請將它們新增到 mod_mime-defaults.conf

mod_*.conf

已預設安裝模組的組態檔案。如需詳細資訊,請參閱節 26.4, "安裝、啟動和設定模組"。請注意,選用模組的組態檔案會存放在 conf.d 目錄。

server-tuning.conf

包含不同 MPM 的組態指示詞 (請參閱節 26.4.4, "多重處理模組") 和可控制 Apache 效能的一般組態選項。請在變更此檔案之後為網頁伺服器進行適當測試。

ssl-global.confssl.*

全域 SSL 組態和 SSL 憑證資料。如需詳細資訊,請參閱節 26.6, "設定提供 SSL 的安全網頁伺服器"

sysconfig.d/*.conf

組態檔案會自動從 /etc/sysconfig/apache2 產生。請勿改變其中任何檔案 -- 而是編輯 /etc/sysconfig/apache2。請勿在此目錄中放置其他組態檔案。

uid.conf

指定要在哪個使用者和群組 ID 之下執行 Apache。請勿進行變更。

vhosts.d/*.conf

您的虛擬主機組態應該會採用這裡的設定。此目錄會包含提供、或不提供 SSL 之虛擬主機的樣板檔案。在這個目錄中以 .conf 作為結尾的每個檔案,都會自動包含 (Include) 至 Apache 組態。如需詳細資訊,請參閱節 26.2.1.2, "虛擬主機組態"

26.2.1.2. 虛擬主機組態

虛擬主機一詞,是指 Apache 從相同一部實體電腦提供多個 URI (資源識別字串,Universal Resource Identifier)。這是指同時由一部實體電腦的單一網頁伺服器來執行多個領域 (例如,www.example.com 和 www.example.net)。

使用虛擬主機的目的,經常是為了節省管理工作 (只需要維護一部網頁伺服器) 和硬體成本花費 (不需要將各個領域安裝在特定伺服器)。虛擬主機可以使用名稱、IP 或是連接埠作為基礎。

虛擬主機可經由 YaST (請參閱節 26.2.2.1.4, "虛擬主機") 或是手動編輯組態檔案進行設定。依預設,在 SUSE Linux 中執行的 Apache,已經在 /etc/apache2/vhosts.d/ 準備好虛擬主機的組態檔案。在這個目錄中副檔名為 .conf 的所有檔案,都會自動包含 (Include) 至此組態。這個目錄會提供虛擬主機的基本樣板 (vhost.template,或是適用於提供 SSL 支援之虛擬主機的 vhost-ssl.template)。

[Tip]永遠要建立虛擬主機組態

我們建議您務必要建立虛擬主機組態檔案,即使網頁伺服器只代管一個領域。建立此檔案時,您不但可以將領域特定組態存放在一個檔案中,還可以隨時簡單移動、刪除或重新命名虛擬主機的組態檔案,以便恢復工作環境的基本組態。同樣地,您應該也要分別為每個虛擬主機建立組態。

<VirtualHost></VirtualHost> 區塊會包含要套用到特定領域的資訊。當 Apache 接收到預定虛擬主機的用戶端要求時,就會使用這個區段所包含的指示詞。幾乎所有指示詞都可以用於虛擬主機網路位置。  如需更多有關 Apache 組態指示詞的詳細資訊,請參閱http://httpd.apache.org/docs/2.0/mod/quickreference.html

26.2.1.2.1. 以名稱為基礎的虛擬主機

使用以名稱為基礎的虛擬主機時,每個 IP 位址可以為超過一個網站提供服務。Apache 會使用用戶端所傳送 HTTP 標題中的主機欄位,將其要求傳送連線到符合其中一個虛擬主機宣告的 ServerName 項目。如果沒有找到相符的 ServerName,就會預設使用第一個指定的虛擬主機。

NameVirtualHost 指示詞會通知 Apache,要在哪個 IP 位址、以及 (選擇性) 哪個連接埠來傾聽領域名稱已包含於 HTTP 標題中的用戶端要求。這個選項會設定在組態檔案 /etc/apache2/listen.conf

第一個引數可以是完整領域名稱 (Fully Qualified Domain Name),但是建議最好使用 IP 位址。第二個引數是連接埠 (選擇性)。根據預設會使用連接埠 80,而且可以透過 Listen 指示詞設定。

IP 位址和連接埠號碼都可以使用萬用字元 *,來接收所有介面上的要求。IPv6 位址必須包在方括號中。

範例 26.1. 以名稱為基礎的 VirtualHost 項目變化

# NameVirtualHost IP-address[:Port]
NameVirtualHost 192.168.1.100:80
NameVirtualHost 192.168.1.100
NameVirtualHost *:80
NameVirtualHost *
NameVirtualHost [2002:c0a8:164::]:80
      

已開啟的 VirtualHost 旗標會將前面經由 NameVirtualHost 宣告的 IP 位址 (完整領域名稱) 當作以名稱為基礎之虛擬主機組態的引數。先前使用 NameVirtualHost 指示詞宣告的連接埠號碼屬於選擇性。

允許使用萬用字元 * 作為 IP 位址的替代符號。這個語法只適用於在 NameVirtualHost * 中結合使用萬用字元情形。如果是使用 IPv6 位址,該位址就必須用方括號包住。

範例 26.2. 以名稱為基礎的 VirtualHost 指示詞

<VirtualHost 192.168.1.100:80>
  ...
</VirtualHost>

<VirtualHost 192.168.1.100>
  ...
</VirtualHost>

<VirtualHost *:80>
  ...
</VirtualHost>

<VirtualHost *>
  ...
</VirtualHost>

<VirtualHost [2002:c0a8:164::]>
  ...
</VirtualHost>
      
26.2.1.2.2. 以 IP 為基礎的虛擬主機

這項替代虛擬主機組態方法需要為一台機器設定多個 IP。一個 Apache 例項可裝載多個領域,每個領域都會指定不同的 IP。

實體伺服器必須為每部以 IP 為基礎的虛擬主機設定一個 IP 位址。當該電腦沒有安裝多張網路卡時,也可以使用虛擬網路介面 (IP 別名)。

下列範例將示範,Apache 正執行於 IP 192.168.0.10 的電腦上,並負責代管 IP 192.168.0.20192.168.0.30 兩個領域。每部虛擬伺服器都必須具備個別的 VirtualHost 區塊。

範例 26.3. 以 IP 為基礎的 VirtualHost 指示詞

<VirtualHost 192.168.0.20>
  ...
</VirtualHost>

<VirtualHost 192.168.0.30>
  ...
</VirtualHost>
      

這裡出現的 VirtualHost 指示詞,只能指定給 192.168.0.10 以外的其他介面。如果 192.168.0.10 也有設定 Listen 指示詞,這時就必須建立另一個以 IP 為基礎的虛擬主機來回應 HTTP 要求給該介面 -- 另一種做法是套用預設伺服器組態 (/etc/apache2/default-server.conf) 所顯示的指示詞。

26.2.1.2.3. 基本虛擬主機組態

每個虛擬主機組態中至少要出現下列指示詞,才能設定虛擬主機。如需了解更多選項的詳細資訊,請參閱 /etc/apache2/vhosts.d/vhost.template

ServerName

完整領域名稱,其下是應該要建立位址的主機。

DocumentRoot

目錄路徑,Apache 應該會從此路徑為此主機提供檔案。基於安全性考量,存取整個檔案系統是預設禁止的動作,所以您必須明確解除鎖定這個位在 Directory 容器中的目錄。

ServerAdmin

伺服器管理員的電子郵件地址這個地址可顯示在 Apache 建立的錯誤頁面 (舉例說明)。

ErrorLog

虛擬主機的錯誤記錄檔案。雖然這時並不一定需要為每個虛擬主機分別建立錯誤記錄檔案,但是多數人會因為這樣可讓偵錯更加容易而採取這種做法。/var/log/apache2/ 是 Apache 保存記錄檔案的預設目錄。

CustomLog

虛擬主機的存取記錄檔案。雖然這時並不一定需要為每個虛擬主機分別建立存取記錄檔案,但是多數人會採取這種做法,以便分別為每個主機分析存取統計記錄。/var/log/apache2/ 是 Apache 保存記錄檔案的預設目錄。

正如前面所述,存取整個檔案系統已因安全性考量而預設為禁止動作。因此,請明確解除鎖定存放下列 Apache 應提供檔案的 DocumentRoot 目錄:

<Directory "/srv/www/example.com_htdocs">
  Order allow,deny
  Allow from all
</Directory>
     

此完整組態看起來如下:

範例 26.4. 基本 VirtualHost 組態

<VirtualHost 192.168.0.10>
  ServerName www.example.com
  DocumentRoot /srv/www/example.com_htdocs
  ServerAdmin webmaster@example.com
  ErrorLog /var/log/apache2/www.example.com_log
  CustomLog /var/log/apache2/www.example.com-access_log common
  <Directory "/srv/www/example.com">
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
      

26.2.2. 使用 YaST 設定 Apache

若要使用 YaST 來設定您的網頁伺服器,請啟動 YaST 並依序選取網路服務+HTTP 伺服器。第一次啟動模組時,HTTP 伺服器精靈會啟動,以便提示您如何決定有關伺服器管理的一些基本設定。完成精靈之後,每當您呼叫 HTTP 伺服器模組時,就會啟動節 26.2.2.2, "HTTP 伺服器組態"中介紹的對話方塊。

26.2.2.1. HTTP 伺服器精靈

HTTP 伺服器精靈包含有五個步驟。在最後一個步驟的對話方塊中,您可以進入進階組態模式以進行更多特定的設定。

26.2.2.1.1. 網路設備選擇

在此,您可以指定 Apache 用來傾聽內送要求的網路介面和連接埠。您可以選取任何現有網路介面及其 IP 位址的組合。若連接埠 (連接埠隸屬以下三種範圍:熟知的連接埠、註冊的連接埠和動態或私人的連接埠) 不供其他服務使用,則皆可供您使用。預設設定為傾聽所有在連接埠 80 上的網路介面 (IP 位址)。

核取開啟選取埠的防火牆選項,可開啟防火牆中網頁伺服器傾聽的連接埠。若要使網頁伺服器在網路 (包括 LAN、WAN 或公用網際網路) 上為可用狀態,請核取此選項。但是,若是處於測試階段且不須由外部網路存取網頁伺服器,就可以關閉此連接埠。

按一下 下一步繼續設定。

26.2.2.1.2. 模組

這個模組組態選項可以用來啟用、或停用網頁伺服器必須支援的程序檔語言。如需有關啟用或停用其他模組的詳細資訊,請參閱節 26.2.2.2.2, "伺服器模組"。按一下下一步,繼續進行下一個對話方塊。

26.2.2.1.3. 預設主機

此選項與預設網頁伺服器相關。正如節 26.2.1.2, "虛擬主機組態"內容所述,Apache 可以在一部實體電腦上提供多個網域。組態檔案中第一個宣告的虛擬主機通常會被視為預設主機。每部虛擬主機都會繼承預設主機的組態。

若要編輯主機設定 (又稱為指示詞),請在表格中選擇適當項目,然後按一下編輯。若要新增指示詞,請按一下新增。若要刪除指示詞,請選取該指示詞,然後按一下刪除

圖形 26.1. HTTP 伺服器精靈:預設主機

HTTP 伺服器精靈:預設主機

這是伺服器預設值的清單:

Document Root

目錄路徑,Apache 會從此路徑為此主機提供檔案。/srv/www/htdocs 是預設位置。

Alias

在配合 Alias 指示詞時,URL 可以映射到實體檔案系統位置。這表示某個路徑即使不在檔案系統的 Document Root 中,仍可藉由該路徑別名的 URL 進行存取。

預設的 SUSE Linux Alias /icons 會指向 /usr/share/apache2/icons,即使用目錄索引檢視模式來顯示 Apache 圖示。

ScriptAlias

功能相似於 Alias 指示詞,ScriptAlias 指示詞可以將 URL 映射到檔案系統位置。兩者差別在於 ScriptAlias 可以將目標目錄指定作為 CGI 位置,表示該 CGI 程序檔必須在該位置執行。

Directory

使用 Directory 設定時,您可以限制只會套用到特定目錄的組態選項群組。

這裡將設定 /usr/share/apache2/icons/srv/www/cgi-bin 等目錄的存取和顯示選項。其中預設值應該不需要進行改變。

Include

使用 Include 時可以指定其他的組態檔案。/etc/apache2/conf.d/ 是包含外部模組隨附組態檔案的目錄。依預設,在此目錄 (*.conf) 中的所有檔案都會進行 Include。/etc/apache2/conf.d/apache2-manual?conf 是一個包含所有 apache2-manual 組態檔案的目錄。

Server Name

這個項目可以指定用戶端用來聯絡網頁伺服器的預設 URL。使用完整領域名稱 (FQDN) 來連線至 http://FQDN/ 的網頁伺服器、或是其 IP 位址。您不能在此選擇任意名稱 -- 該伺服器必須是"已知"名稱的伺服器。

Server Administrator E-Mail

伺服器管理員的電子郵件地址這個地址可顯示在 Apache 建立的錯誤頁面 (舉例說明)。

Server Resolution

這個選項又稱節 26.2.1.2, "虛擬主機組態"按 HTTP 標頭決定要求伺服器選項可以讓 VirtualHost (虛擬主機) 對該伺服器名稱的要求做出回應 (請參閱節 26.2.1.2.1, "以名稱為基礎的虛擬主機")。按 HTTP 標頭決定要求伺服器選項可讓 Apache 按用戶端傳送的 HTTP 標頭資訊來選取要求的主機。如需更多有關以 IP 為基礎之虛擬主機的詳細資訊,請參閱節 26.2.1.2.2, "以 IP 為基礎的虛擬主機"

完成設定預設主機步驟後,請按一下下一步,繼續下一個組態步驟。

26.2.2.1.4. 虛擬主機

在此步驟中,精靈會顯示已完成設定虛擬主機的清單 (請參閱節 26.2.1.2, "虛擬主機組態")。如果您在啟動 YaST HTTP 精靈之前並沒有手動變更,而目前只有出現一部虛擬主機 -- 即與先前步驟所設定預設主機完全相同的主機。這部虛擬主機會被標示為預設主機 (伺服器名稱旁邊會有一個星號)。

若要新增主機,請按一下新增開啟對應的對話方塊,並在其中輸入該主機的基本資訊。伺服器識別中包括伺服器名稱、伺服器來源根目錄 (DocumentRoot) 和管理員電子郵件。伺服器解析可用來決定主機的識別方式 (以名稱為基礎或是以 IP 為基礎)。如需這些選項的詳細資訊,請參閱節 26.2.2.1.3, "預設主機"

按一下下一步,繼續進入虛擬主機組態對話方塊的第二部分。

在虛擬主機組態對話方塊的第二部分中,您可以指定是否要啟用 CGI 程序檔、以及這些程序檔要使用哪個目錄。您也可以在此啟用 SSL。如果執行了這個動作,您就必須同時指定該憑證的路徑。如需有關 SSL 和憑證的詳細資訊,請參閱節 26.6.2, "設定提供 SSL 的 Apache"。使用目錄索引選項時,您可以指定當用戶端要求目錄 (依預設是指 index.html) 時要顯示哪個檔案。如果您要變更這個設定,請新增一個或多個檔名 (以空格分隔)。使用啟用公用 HTML時,使用者公用目錄 (~user/public_html/) 的內容就可由伺服器公開於 http://www.example.com/~user

[Important]建立虛擬主機

您不能在此隨意新增虛擬主機。如果是使用以名稱為基礎的虛擬主機,此網路就會解析每個主機名稱。如果是使用以 IP 為基礎的虛擬主機,每個可用 IP 位址就只能指派一部主機。

26.2.2.1.5. 摘要

這是精靈的最後一個步驟。您可以在此處決定 Apache 伺服器啟動的方式和時間:開機時間或手動開機。同時可檢視目前已完成組態的簡短摘要。如果您接受目前設定,請按一下完成以完成組態設定。如果要改變某些設定,請按一下上一步,直到出現您需要的對話方塊。按一下 HTTP 伺服器進階組態便可開啟節 26.2.2.2, "HTTP 伺服器組態"所介紹的對話方塊。

圖形 26.2. HTTP 伺服器精靈:摘要

HTTP 伺服器精靈:摘要

26.2.2.2. HTTP 伺服器組態

HTTP 伺服器組態對話方塊也可以提供比精靈還多的調整設定 (精靈只會在初次設定網頁伺服器時啟動)。其中包含下列要介紹的四個索引標籤。在此變更的任何選項都無法立即生效 -- 您必須先按一下完成進行確認之後,才可使它們生效。按一下取消,便可保留組態模組不變並捨棄您的變更。

26.2.2.2.1. 傾聽連接埠和位址

HTTP 服務中,選擇 Apache 應該要執行 (啟用) 或停止 (停用)。在傾聽連接埠中,新增編輯刪除其上應該提供可用伺服器的位址和連接埠。預設設定是傾聽在連接埠 80 上的所有介面。您應該時時核取開啟選取連接埠防火牆,否則網頁伺服器就不能提供外部連結。但是,若是處於測試階段且不須由外部網路存取網頁伺服器,就可以關閉此連接埠。

使用記錄檔案時,可檢視存取記錄或錯誤記錄。這是測試組態時相當有用的工具。這種記錄檔案會開啟於個別視窗,而且供您重新啟動或重新載入網頁伺服器 (如需詳細資訊,請參閱節 26.3, "啟動和停止 Apache")。這些指令會立即生效。

圖形 26.3. HTTP 伺服器組態:傾聽連接埠和位址

HTTP 伺服器組態:傾聽連接埠和位址
26.2.2.2.2. 伺服器模組

您可以按一下切換狀態,改變 Apache2 模組的狀態 (啟用或停用)。請按一下新增模組,來加入已經安裝但是未列出的新模組。若要更進一步認識模組,請參閱節 26.4, "安裝、啟動和設定模組"

圖形 26.4. HTTP 伺服器組態:伺服器模組

HTTP 伺服器組態:伺服器模組
26.2.2.2.3. 預設主機或多部主機

這些對話方塊相同於前面已介紹過的對話方塊。請參閱節 26.2.2.1.3, "預設主機"節 26.2.2.1.4, "虛擬主機"