簡介
Apache 是目前世界上使用最廣泛的網頁伺服器。它是一款在二十多年前開發的開源軟體,並由 Apache 軟體基金會 維護。截至 2020 年 9 月,估計它為全球 35% 的網站流量提供服務.
開發人員因 Apache 的速度、安全性、可靠性、強健性以及易於自訂而偏好使用它。此外,Apache 能夠滿足許多環境的需求,因為它允許安裝各種擴充功能和模組。這得益於一組設定,開發人員和伺服器管理員可以修改這些設定以達到不同的目的。在本教學中,我們將引導您了解 在 Ubuntu 和 Debian 伺服器上可能會影響不同結果的一般設定檔和選項。
Debian 和 Ubuntu 是首選的頂級伺服器作業系統之一。兩者有許多相似之處。例如,它們都使用 APT 套件管理員 和 DEB 套件 進行手動安裝。它們處理 Apache 設定和目錄結構的方式非常相似。因此,您應該可以使用這兩種作業系統中的任何一種來進行本教學。首先,您可以按照此 教學,只需幾個步驟即可設定 Ubuntu 伺服器.
接下來,以具有 sudo 權限的非 root 使用者身分登入,讓我們開始吧!
如何在 Ubuntu 和 Debian 上安裝 Apache
如果您的伺服器尚未安裝 Apache,您可以使用一個指令輕鬆安裝。首先,執行更新指令:
|
1 |
sudo apt-get update |
然後,您可以透過發送以下指令來安裝 Apache:
|
1 |
sudo apt-get install apache2 |
安裝完成後,您可以使用以下指令檢查安裝的版本:
|
1 |
apache2 -v |
在撰寫本教學時,版本為:

之後,造訪您伺服器的 IP 位址或網域名稱。您應該能夠看到預設的 Apache 索引頁面:

Ubuntu 和 Debian 發行版中的 Apache 檔案階層
Ubuntu 和 Debian 發行版都使用 apt 套件管理員。同樣地,當您安裝套件時,它會建立類似的檔案階層。在我們的情況下,對於 Ubuntu 和 Debian,Apache 都將其設定檔保存在「/etc/apache2」目錄中。使用以下指令進入該目錄並列出該目錄的內容:
|
1 2 |
cd /etc/apache2 ls -F |
您可以在下方的螢幕截圖中看到該指令的輸出:

您可以看到一些在設定 Apache 伺服器時應該熟悉的檔案和子目錄。以下是它們的說明:
- apache2.conf – 這是 Apache 伺服器的主要設定檔。此外,它包含所有預設設定。雖然幾乎所有設定都可以在此檔案中完成,但為了簡化並防止此預設檔案損壞,始終建議使用個別指定的檔案。
- conf-available – 這是包含其他本機設定檔以及尚未與任何模組關聯的其他應用程式檔案的目錄。除非您啟用它們,否則此目錄中的設定不會生效。指令 a2enconf 可以啟用設定檔。以下是此目錄的內容:

- conf-enabled – 這是包含其他本機設定以及與其對應模組關聯的其他應用程式設定檔的目錄。此目錄中的設定檔已啟用並會影響 Apache 的行為。您可以使用以下指令停用設定檔 a2disconf。以下是此目錄的內容:

- envvars – 這是包含 Apache2 環境變數的檔案。此檔案中的變數僅影響 Apache,與您的 Linux 系統無關。以下是該檔案的內容:

- magic – 這是包含用於確定檔案 MIME 類型之說明的檔案。它有助於伺服器確定檔案的類型。
- mods-available – 這是包含用於載入模組並進行設定之設定檔的目錄。然而,它們尚未啟用。您可以使用 a2enmod 指令來啟用它們。
- mods-enabled – 這是包含用於載入模組並進行設定之設定檔的目錄。此目錄中的設定已啟用,並連結至對應的模組。您可以使用 a2dismod 指令來停用模組。
- ports-conf – 這是指定虛擬主機可用連接埠以及 Apache 正在監聽之 TCP 連接埠的檔案。
- sites-available – 這是包含 Apache 虛擬主機可用設定檔的目錄。虛擬主機允許 Apache 提供不同的網站。此目錄中的檔案尚未啟用。您可以使用以下指令啟用虛擬主機檔案:a2ensite.
- sites-enabled – 這是包含已啟用虛擬主機設定檔的目錄。它通常包含指向 sites-available 目錄中檔案的符號連結。您可以使用以下指令停用虛擬主機檔案:a2dissite.
Apache 設定檔的模組化設計允許您根據需要修改和新增檔案。
Apache2.conf 檔案的內容
位於 “/etc/apache2/apache2.conf” 包含 Apache 的主要設定檔。更具體地說,它包含為伺服器提供指令的設定指令。它由三個部分組成,用以定義 global server 程序設定、default server 設定,以及 virtual hosts 設定。
在 Ubuntu 和 Debian 系統中,該檔案的大部分內容包含全域伺服器程序設定。在底部附近,您可以使用 “Include” 指令來找到預設伺服器和虛擬主機的設定。Apache 使用 “Include” 指令讀取其他設定檔,然後從該指令出現的位置將它們包含到目前的設定檔中。這發生在 Apache 伺服器啟動時。
捲動到 apache2.conf 檔案的底部,您應該會看到幾個 include 指令。這些指令會載入位於 mods-enabled 目錄中的模組定義、ports.conf 檔案、位於 conf-enabled 目錄中的本機設定,以及位於 sites-enabled 目錄中的虛擬主機’設定。
全域伺服器設定區段
全域伺服器設定區段包含控制 Apache 全域運作方式的設定和指令。它包含一些指令,您可以修改其值以變更 Apache 的行為。讓我們來討論其中一些:
- Timeout – 此指令指定伺服器完成請求的最大時間。預設為 300 秒,如果您正在開發回應速度更快的應用程式,這可能太高了。如果您的伺服器有足夠的資源,您可以將此值變更為較小的值。
- KeepAlive – 指定每個連線應保持開啟狀態,以處理來自同一用戶端的多個請求。預設設定為 “On”。然而,如果設定為 “Off”,則每個請求都必須建立新連線,即使是來自同一用戶端也是如此。這可能會導致嚴重的伺服器過載。
- MaxKeepAliveRequests – 它控制在單一持續連線中斷開之前允許的最大請求數。若要允許無限數量的連線,請將該值設定為 0。為了獲得最大的效能和效率,請將該數字設定為最高可能的值。
- KeepAliveTimeout – 它決定在最後一次請求之後,等待來自同一用戶端的下一次請求的最大秒數,超過此時間連線即會中斷。預設為 5 秒。如果時間已過,則在下一次請求中,將建立新連線來處理該請求。
- HostnameLookups – 決定是否啟用 DNS 查詢。預設為關閉。如果您啟用它,則每個請求都將導致對名稱伺服器進行至少一次查詢,這將對您的伺服器效能產生極大的負面影響。
Default Virtual Host File
全新安裝的 Apache 伺服器會附帶一個名為 000-default.conf 的預設虛擬主機檔案。這是用於提供預設 Apache index.html 網頁的檔案。它位於 sites-available 目錄中。此檔案的內容可以讓您大致瞭解 Apache 虛擬主機檔案的格式。輸入以下指令以開啟該檔案:
|
1 |
sudo nano /etc/apache2/sites-available/000-default.conf |
以下是該檔案的內容。為了簡潔起見,我們已刪除了註解:
|
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
正如您在設定標頭中所看到的 VirtualHost *:80,預設情況下,此虛擬主機設定為處理連接埠 80 上的請求。這是標準的 HTTP 連接埠。
Apache 的設計旨在採用與特定請求最相符且最明確的虛擬主機定義。這意味著這個特定的虛擬主機不一定會處理發送到伺服器的每個請求。相反地,如果存在另一個具有更具體定義的虛擬主機檔案,它將會覆蓋此檔案。
以下是虛擬主機檔案中指令的說明:
- ServerAdmin – 指定當伺服器出現問題時使用的聯絡電子郵件。Apache 通常會將其顯示在產生的錯誤頁面上。如果您在 ServerSignature 設定為 “Email”,位於 /etc/apache2/conf-enabled/security.conf 檔案中,此處指定的電子郵件地址將會與 mailto
- DocumentRoot – 此指令指向包含網站檔案的目錄。您可以在 /var/www/html 目錄中找到預設的 Apache 歡迎首頁(在 Ubuntu 20.04 中)。
- ErrorLog – 此指令決定錯誤記錄檔的位置。
- CustomLog – 此指令顯示存取記錄檔的位置以及記錄顯示格式。
其他虛擬主機指令
- ServerName – 它指定虛擬主機應處理的網域名稱或 IP 地址。如果我們要定義多個虛擬主機,以便我們的 Apache 伺服器可以提供多個網站,我們將新增一個 ServerName 指令並指定每個虛擬主機應服務的網域。
- ServerAlias – 此指令使一個虛擬主機檔案適用於多個名稱,提供替代網域以獲取相同的內容。例如,當您的使用者在您的網域名稱前加上 www 時,也能存取相同的內容。例如,我們可以將以下內容新增至 example.com 網域的虛擬主機中:
|
1 2 |
ServerName example.com ServerAlias www.example.com |
目錄定義指令
在實際情況中,您的網站檔案很可能位於多個目錄中。預設的虛擬主機檔案沒有 Directory 指令,因為它只能提供一個 index.html 檔案。而 Directory 指令指定了 Apache 如何處理網站文件根目錄中的不同目錄。您也是在此指令中定義對檔案系統的存取限制。預設情況下,Apache 僅允許網際網路存取 /var/www 目錄中的檔案。在此目錄中,您可以建立其他用於存放網站檔案的目錄。此外,您可以指定希望如何存取該目錄中的檔案。範例定義如下所示:
|
1 2 3 4 5 |
<Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> |
其中的 <Directory /var/www/html> 指定了這些規則將套用的目錄。而 “AllowOverride」選項指定是否將「.htaccess」檔案(若放置在指定目錄中)應覆蓋該設定。當使用像 Laravel 這樣需要配合 .htaccess 和 URL 重寫運作的框架時,這是必需的。
若要深入了解虛擬主機,您可以造訪我們的關於如何在 Ubuntu 20.04 上設定 Apache 虛擬主機的教學。以下是包含我們定義之所有指令的虛擬主機檔案範例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@localhost.com DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews Require all granted AllowOverride all </Directory> </VirtualHost> |
Redirect、Alias 和 ScriptAlias 指令
在某些情況下,您可能希望存取不直接位於 DocumentRoot 目錄下的網站檔案或可執行檔。這就是這三個指令派上用場的地方。
該 Redirect 指令指示用戶端使用不同的 URL 發出新請求。通常,當您想將網站訪客引導至不同的網域名稱或 IP 地址時,會使用此指令。請注意,Redirect 會在 Alias 和 ScriptAlias 之前先執行。而 Alias 指令會將 URL 對應到目錄路徑。 ScriptAlias 指令會將 URL 對應到包含可執行指令碼的目錄。為了讓 Alias 和 ScriptAlias 正常運作,您必須將目錄權限設定為網頁服務所使用的 www-data 使用者。
如何在 Apache 中啟用網站與模組
虛擬主機和模組必須先啟用,才能變更為作用中並讓 Apache 程序存取。此外,如前所述,虛擬主機是在 sites-available 目錄中建立的。如果您有一個名為 example.com.conf 的虛擬主機檔案,您可以使用以下指令來啟用它:
|
1 |
sudo a2ensite example.com.conf |
該指令會啟用虛擬主機。然而,為了讓變更生效,您必須輸入以下指令來指示 Apache 重新載入設定檔:
|
1 |
sudo service apache2 reload |
您可能想要停用名為 example.com.conf 的虛擬主機檔案,使 Apache 不再使用它來處理請求。為此,請輸入以下指令來停用該檔案:
|
1 |
sudo a2dissite example.com.conf |
同樣地,為了讓變更立即生效,您必須輸入以下指令來指示 Apache 重新載入設定檔:
|
1 |
sudo service apache2 reload |
同樣地,您可以使用相同的語法來啟用和停用模組。啟用模組的指令為 “a2enmod”,而停用模組的指令為 “a2dismod.” 例如,有一個名為 mod_rewrite 的 Apache 模組,可協助根據 .htaccess 設定來重寫 URL。您必須啟用此模組才能讓 .htaccess 檔案發揮作用。您可以透過輸入以下指令來執行此操作:
|
1 |
sudo a2enmod rewrite |
為了讓此變更生效,您必須重新載入 Apache 設定。您也可以透過輸入以下指令來停用該模組:
|
1 |
sudo a2dismod rewrite |
之後,重新載入 Apache2 設定以使變更立即生效。
最後,這裡有一些可以幫助您熟悉 Apache 網頁伺服器的其他資源:
- 在 Ubuntu 18.04 上安裝 Apache 伺服器:新手指南
- 如何在 CentOS 7 上安裝 Linux、Apache、MySQL、PHP (LAMP) 堆疊
- 在 Ubuntu 18.04 上使用 Let’s Encrypt 保護 Apache 安全
- 網頁伺服器的世界:Apache vs. Nginx
結論
在本教學中,我們定義了 Ubuntu 和 Debian 系統上的基本 Apache 設定檔。正如我們所演示的,Apache 具有高度模組化,這意味著您可以安裝許多模組來執行不同的任務。
您可以輕鬆啟用和停用這些模組,並變更其他設定以達到不同的效果。您現在可以修改本機設定檔,這些設定檔隨後會包含在主設定檔中。因此,您不必擔心損壞全域設定檔。
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。