博客 / 詳情

返回

Ubuntu/Debian VPS 上 Apache Web 服務器的完整配置教程

Apache 是互聯網上最流行的 Web 服務器之一,用於託管超過半數活躍網站。儘管市面上存在許多可用的 Web 服務器,但由於 Apache 的普遍性,瞭解其工作原理仍然具有重要意義。

本文將分享 Apache 的通用配置文件及其可配置選項。文中將以 Ubuntu/Debian 系統的 Apache 文件佈局為例進行説明,這種佈局方式與其他 Linux 發行版的配置層級結構有所不同。

版本兼容性​​説明​:本教程已在 Ubuntu 22.04 LTS、Ubuntu 24.04 LTS、Ubuntu 25.04 以及 Debian 11、Debian 12 系統上通過驗證測試。所有展示的命令和配置均兼容上述版本,且 Apache 配置結構與命令(如 a2ensite、a2dissite、a2enmod 和 a2dismod)在這些 Ubuntu 與 Debian 版本中保持一致性操作。

本文核心要點

  • 模塊化配置結構:Ubuntu/Debian 系統上的 Apache 採用模塊化配置體系,通過獨立目錄分別管理站點(sites-available/與 sites-enabled/)、模塊(mods-available/與 mods-enabled/)和配置片段(conf-available/與 conf-enabled/),無需修改整體配置文件即可輕鬆啓用或禁用功能。
  • 虛擬主機管理:虛擬主機支持在單台服務器上託管多個網站。通過 a2ensite 和 a2dissite 命令管理符號鏈接來操控站點配置,而 ServerName 與 ServerAlias 指令則控制每個虛擬主機處理的域名。
  • 全局配置選項:主配置文件 apache2.conf 中的關鍵性能參數(如 Timeout、KeepAlive、MaxKeepAliveRequests 和 KeepAliveTimeout)會顯著影響服務器性能,應根據流量模式和服務器資源進行針對性調優。
  • 目錄安全機制:Apache 採用從最具體到最通用的目錄配置繼承方式,允許先設置基礎安全規則(如禁止所有訪問),再為特定目錄開放權限。AllowOverride 指令可控制.htaccess 文件是否能夠覆蓋服務器設置。
  • 模塊化系統:Apache 的模塊系統通過 a2enmod 和 a2dismod 命令實現功能擴展。在現代 Ubuntu/Debian 系統中,event MPM(多處理模塊)作為默認配置,為併發連接提供高效處理能力。

準備工作

若您使用的 Ubuntu 版本為 16.04 或更早,建議升級至更新的版本,因為 Ubuntu 官方已不再為這些舊版本提供支持。您可以參考 DigitalOcean 官網社區的升級指南系列來完成系統升級。如需要了解 DigitalOcean Droplet VPS 的詳細產品信息,可諮詢 DigitalOcean 中國區獨家戰略合作伙伴卓普雲 AI Droplet。

需要準備一台運行 Ubuntu 的服務器,並配置好具有 sudo 權限的非 root 用户及有效的防火牆。具體設置方法可查看 DigitalOcean 教程,或根據您的系統版本選擇對應的初始化服務器配置指南。

在開始探索 Apache 配置之前,請確保已在服務器上安裝 Apache。

Ubuntu 系統配置ApacheWeb 服務器的 5 個步驟

  1. 瞭解 Apache 文件層級結構
  2. 解析 Apache2.conf 主配置文件
  3. 配置全局參數
  4. 設置虛擬主機文件
  5. 啓用站點與功能模塊

步驟一:Apache文件層級結構

Apache 的主配置文件存放在/etc/apache2 目錄中。執行以下命令可列出該目錄下的所有文件:

ls -f /etc/apache2

輸出示例

envars sites-available . apache2.conf .. sites-enabled mods-available ports.conf magic mods-enabled conf-enabled conf-available

該目錄包含若干純文本文件和子目錄。需要重點了解的常用路徑如下:

  • apache2.conf​:服務器主配置文件。雖然幾乎所有配置都可在此文件中完成,但為簡化管理,建議使用獨立的專用文件。此文件將配置默認參數,並作為服務器讀取配置信息的核心入口。
  • ports.conf​:此文件用於指定虛擬主機的監聽端口。配置 SSL 時請務必檢查此文件設置。詳細的 SSL 配置説明可參閲我們的指南《如何在 Ubuntu 上使用 Let's Encrypt 加密 Apache》。
  • sites-available/與 sites-enabled/​:sites-available 目錄存放虛擬主機配置文件。該目錄下的配置決定了不同請求對應的服務內容。通過創建指向 sites-enabled 目錄的符號鏈接來啓用配置,後者存儲已激活的虛擬主機配置文件。Apache 在啓動或重載時,會讀取 sites-enabled 目錄中的配置文件與鏈接以編譯完整配置。
  • conf-available/與 conf-enabled/​:這些目錄存放與虛擬主機配置文件分離的配置片段。
  • mods-enabled/與 mods-available/​:這些目錄定義可選的加載模塊。每個目錄包含兩種文件:以.load 結尾的文件包含加載特定模塊的指令片段;以.conf 結尾的文件存儲這些模塊的配置參數。

Apache 配置並非採用單一的整體文件,而是通過模塊化設計實現,可根據需要增刪或修改獨立配置文件。

步驟二:解析 apache2.conf 文件

Apache 服務器的主要配置信息存儲在/etc/apache2/apache2.conf 文件中。該文件分為三個核心部分:

  1. Apache 全局進程配置
  2. 默認服務器配置
  3. 虛擬主機配置

使用您慣用的文本編輯器打開此文件(以下示例使用 nano 編輯器):

sudo nano /etc/apache2/apache2.conf

在 Ubuntu 和 Debian 系統中,此文件用於定義全局配置項。默認服務器與虛擬主機的配置則通過 Include 指令實現。

Include 指令允許 Apache 在指令出現位置導入其他配置文件。通過這種方式,Apache 在啓動時會動態生成完整的總體配置文件。

該文件中包含多個 Include 和 IncludeOptional 聲明語句,這些指令用於加載模塊定義、ports.conf 文檔、conf-enabled/目錄中的特定配置文件以及 sites-enabled/目錄中的虛擬主機定義:

/etc/apache2/apache2.conf
…
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
…
Include ports.conf
…
IncludeOptional conf-enabled/*.conf
…
IncludeOptional sites-enabled/*.conf

步驟三:配置Apache全局參數

在全局配置中,您可能需要調整以下參數:

超時設置(Timeout)

此參數默認值為 300 秒,表示服務器處理每個請求的最長時間上限。建議將其調整為 30 至 60 秒之間的安全值。

持久連接(KeepAlive

此選項若設置為 On,將允許單個連接保持開放狀態以處理同一客户端的多個請求。若設為 Off,則每個請求都需建立新連接,根據您的服務器設置和流量狀況,可能會產生顯著的性能開銷。

最大持久請求數(MaxKeepAliveRequests)

此參數控制單個連接在處理多少次獨立請求後終止。保持較高數值可提升 Apache 對每個客户端的服務效率。默認設置為 100,若設為 0 則允許每個連接處理無限次請求。

持久連接超時(KeepAliveTimeout)

此設置指定完成上次請求後等待下次請求的間隔時間。若達到超時閾值,連接將自動終止。這意味着下次請求內容時,服務器需重新建立連接來處理構成客户端訪問頁面的內容請求。默認值為 5 秒。

查看配置文件內容後,可按 CTRL+X 組合鍵退出編輯。

多處理模塊(MPM

多處理模塊(MPM)是 Apache 模塊化設計的延伸。MPM 負責監聽、調度和處理不同的網絡請求。您可通過以下命令交叉驗證 Apache 安裝時編譯的模塊信息:

apache2ctl -L

輸出示例

Compiled in modules:
  core.c
  mod_so.c
  mod_watchdog.c
  http_core.c
  mod_log_config.c
  mod_logio.c
  mod_version.c
  mod_unixd.c

使用 a2query -M 命令可查看服務器當前啓用的 MPM 類型:

a2query -M

輸出示例

event

輸出顯示該服務器正在使用 event 類型的 MPM。您的安裝環境可能提供多種 MPM 選擇,但同一時間只能啓用其中一種。

步驟四:配置Apache虛擬主機文件

默認虛擬主機聲明位於 sites-available/目錄下的 000-default.conf 文件中。通過查看此文件可以瞭解虛擬主機文件的基本格式。

使用以下命令打開文件:

sudo nano /etc/apache2/sites-available/000-default.conf

文件內容示例​:

<VirtualHost *:80>
…
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
…
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
…

默認虛擬主機配置為處理 80 端口(標準 HTTP 端口)的所有請求。這通過聲明頭中的*:80 定義,表示任意網絡接口的 80 端口。但這並不意味着它必然處理該端口的所有請求——Apache 會採用與請求最匹配的虛擬主機定義,更具體的定義可能覆蓋此配置。查看文件後可按 CTRL+X 退出。

Apache虛擬主機配置

以下選項設置在虛擬主機定義內(不包含其他下層子聲明),適用於整個虛擬主機。首先打開 conf-available/目錄下的 security.conf 文件:

sudo nano /etc/apache2/conf-available/security.conf

此文件包含 ServerSignature 指令,可用於設置服務器出現問題時顯示的聯繫郵箱。將默認值從 On 改為 EMail 可顯示管理員郵箱(請確保您願意接收相關郵件):

ServerSignature EMail

按 CTRL+X 退出。編輯配置文件後,系統會提示確認更改:按 Y 保存更改,按 N 放棄更改。

在虛擬主機文件中,可添加 ServerName 指令指定該虛擬主機處理的域名或 IP 地址。此選項將增加虛擬主機的特異性,當匹配 ServerName 值時即可覆蓋默認定義。運行以下命令打開虛擬主機文件(請將 your\_domain 替換為實際域名):

sudo nano /etc/apache2/sites-available/your_domain.conf

添加域名至 ServerName 指令:

ServerName your_domain

同樣,也可使用 ServerAlias 指令使虛擬主機應用於多個名稱(例如添加帶 www 前綴的相同域名):

ServerAlias www.your_domain.com

DocumentRoot 指令指定該虛擬主機請求內容的存儲位置。Ubuntu 系統的默認虛擬主機配置內容目錄為/var/www/:

DocumentRoot /var/www/your_domain/public_html

目錄定義

在虛擬主機定義內部,包含服務器如何處理文件系統中不同目錄的配置。Apache 將按路徑從短到長的順序應用這些規則,因此後續配置可覆蓋先前設置。通過以下命令打開 apache2.conf 文件:

sudo nano /etc/apache2/apache2.conf

文件內容示例​:

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

第一個目錄定義對根目錄/應用規則,為文件系統上所有服務內容提供基準配置。請注意文件中的目錄配置選項及相關注釋——此默認配置拒絕訪問所有內容,除非後續目錄定義另行指定。

Require 指令可限制或開放服務器內資源的訪問權限。AllowOverride 指令決定是否允許內容目錄中的.htaccess 文件覆蓋服務器設置(默認不允許,但在多種場景下啓用會很有用)。查看文件後按 CTRL+X 退出。

別名與腳本別名聲明

目錄定義前有時會使用 Alias 或 ScriptAlias 指令。通過以下命令打開虛擬主機配置文件(請替換 your\_domain 為實際域名):

sudo nano /etc/apache2/sites-available/your_domain.conf

Alias 指令將 URL 路徑映射到目錄路徑。例如,在處理 your\_domain 請求的虛擬主機中,以下配置允許通過訪問 your\_domain.com/content/獲取/usr/local/apache/content/目錄的內容:

Alias "/content/" "/usr/local/apache/content/"

ScriptAlias 指令功能相似,但用於定義包含可執行組件的目錄:

ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"

請記得按前一節討論的方法為目錄定義訪問權限。編輯完成後按 CTRL+X 退出:若對文件進行了修改,按 Y 保存更改,按 N 保留原始配置。

步驟五:啓用站點與功能模塊

當您完成符合需求的虛擬主機文件配置後,可使用 Apache 內置工具將其轉換為在線網站。

通過以下命令在 sites-enabled 目錄中創建指向 sites-available 目錄現有文件的符號鏈接(請將 your\_domain 替換為您的虛擬主機配置文件名稱):

sudo a2ensite your_domain

啓用站點後,執行以下命令使 Apache 重新加載配置文件以應用變更:

sudo systemctl restart apache2

同時存在對應的虛擬主機禁用命令,該命令通過刪除 sites-enabled 目錄中的符號鏈接實現操作。例如,啓用您的虛擬主機站點後,可禁用默認的 000-default 站點:

sudo a2dissite 000-default

功能模塊可通過 a2enmod 和 a2dismod 命令分別啓用或禁用,其操作方式與 a2ensite/a2dissite 命令類似。例如啓用信息顯示模塊:

sudo a2enmod info

同理,禁用模塊可使用:

sudo a2dismod info

請注意:修改配置文件及啓用/禁用模塊後,務必重啓 Apache 服務使配置生效。

常見問題解答

1. 如何檢測Apache配置的語法錯誤?

在重啓 Apache 前,可通過 apache2ctl 命令檢測配置文件語法:

sudo apache2ctl configtest

此命令將檢查配置文件並報告語法錯誤。若配置正確,將顯示 Syntax OK;若存在錯誤,輸出會指明問題所在的文件及行號。

2. 如何在同一Apache​​服務器上配置多個虛擬主機

您可以在/etc/apache2/sites-available/目錄中為每個域名創建獨立的配置文件。每個虛擬主機文件需配置唯一的 ServerName 指令。創建完成後啓用配置並重啓 Apache:

sudo a2ensite example.com.conf
sudo a2ensite anotherdomain.com.conf
sudo systemctl restart apache2

Apache 將根據請求中的域名匹配最具體的虛擬主機配置來提供對應內容。

3. ​VPS基礎託管需要哪些核心Apache模塊?

基礎網站託管常用模塊包括:

  • rewrite​:啓用 URL 重寫與重定向(多數 Web 應用必需)
  • ssl​:提供 HTTPS 所需的 SSL/TLS 支持
  • headers​:允許修改 HTTP 請求與響應頭
  • expires​:通過 Expires 頭控制瀏覽器緩存

可通過以下命令查看當前已啓用模塊:

apache2ctl -M

啓用模塊使用 sudo a2enmod 模塊名後重啓 Apache。

4. 配置更改後Apache無法啓動如何排查?

若 Apache 在配置更改後啓動失敗,請按以下步驟排查:

檢查配置語法:

sudo apache2ctl configtest

查看 Apache 錯誤日誌獲取具體錯誤信息:

sudo tail -n 50 /var/log/apache2/error.log

檢查 systemd 服務狀態獲取詳細錯誤:

sudo systemctl status apache2

若最近啓用了模塊或站點,可嘗試臨時禁用:

sudo a2dismod 問題模塊名
sudo a2dissite 問題站點名
sudo systemctl restart apache2

常見問題包括配置文件語法錯誤、端口衝突或缺少必需模塊。

5. 如何提升VPS上的Apache性能?

可通過以下配置調整提升性能:

調整MPM​​參數​:若使用 event MPM(Ubuntu/Debian 默認),可在/etc/apache2/mods-available/mpm\_event.conf 中優化 MaxRequestWorkers、ThreadsPerChild 和 ServerLimit。

啓用壓縮​:啓用 deflate 模塊壓縮響應內容:

sudo a2enmod deflate

優化持久連接​:在 apache2.conf 中根據流量模式調整 KeepAlive、MaxKeepAliveRequests 和 KeepAliveTimeout。

啓用瀏覽器緩存​:使用 expires 模塊為靜態內容設置緩存頭。

禁用非必需模塊​:移除未使用模塊以減少內存佔用:

sudo a2dismod 未使用模塊名

調整後務必測試性能變化並監控服務器資源使用情況。

結語

Apache 因其高度模塊化設計而具備極強的靈活性,配置需求會因具體環境而異。通過了解上述常規用例,您應對主要配置文件的功能及其交互關係建立了清晰認知。如需瞭解具體配置選項,配置文件中的註釋説明和 Apache 官方文檔都是絕佳參考資源。現在您應當對配置文件不再感到陌生,並能更自信地根據需求進行調整與實驗。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.