Apache HTTP Server 是什麼:初學者指南

更新日期: 2025 年 3 月 13 日

Apache HTTP Server(簡稱 Apache)是一款功能強大、開源的網頁伺服器,廣泛應用於全球各類網站和應用程式中。

它是由 Apache Software Foundation(ASF)開發和維護的,穩定、安全且靈活,支援多種作業系統和模組擴充功能。

對於網站開發者、系統管理員和 DevOps 工程師來說,學會使用 Apache 是一項非常有價值的技能。

本篇文章將帶領初學者全面了解 Apache HTTP Server,包括它的基本概念、安裝與設定方法、常見的應用場景以及實用的操作技巧,幫助你快速上手並有效運用於實際專案中。


Apache HTTP Server 是什麼?

Apache HTTP Server(簡稱 Apache)是一款強大且歷史悠久的開源網頁伺服器軟體,由 Apache Software Foundation (ASF) 開發和維護。

最早於 1995 年推出,Apache 在網頁伺服器市場中長期保持著領先地位,至今仍是全球使用最廣泛的伺服器之一。

根據 Netcraft 的調查,全球數百萬個網站(尤其是企業網站、電子商務平台和政府網站)都依賴於 Apache 來提供網站服務。

Apache 的主要功能與作用

Apache 主要用於接收並回應客戶端(瀏覽器)發送的 HTTP/HTTPS 請求,將網站內容(如 HTML 頁面、圖片、影片、CSS、JavaScript 等)提供給使用者。

它支援多種協定,除了標準的 HTTP/1.1HTTP/2 外,還正在開發對 HTTP/3(QUIC) 的支持,保持與現代網路技術的同步。

Apache 也可以與各種後端語言(如 PHPPythonPerlRuby)協作,透過 CGI(Common Gateway Interface)或模組(如 mod_phpmod_wsgi)提供動態網站服務。

適用於部落格、論壇、內容管理系統(CMS)以及 API 伺服器等多種應用場景。

開源與社群支持

Apache 是完全開源的,基於 Apache 2.0 授權,這意味著:

  • 任何人都可以免費下載、使用和修改其原始碼。
  • 可用於個人、商業或學術用途,沒有授權費用的限制。
  • 容易與其他開源項目集成,例如 MySQLPHPWordPress 等。

此外,Apache 擁有一個活躍的開源社群,該社群提供:

  • 技術文件與手冊:如 Apache 官方文檔 和各種學習資源。
  • 豐富的插件與模組:社群和第三方開發者貢獻了大量模組,擴充了 Apache 的功能。
  • 技術支持與論壇:透過論壇、郵件列表(Mailing Lists)和 IRC 頻道,初學者和專業人士都能獲得幫助和技術支持。

支援多種作業系統

Apache 是一個跨平台的伺服器軟體,能夠運行於多數主流作業系統上,包括:

  • Linux/Unix 系列:如 Ubuntu、CentOS、Debian、Red Hat 等伺服器版本,這也是生產環境中最常見的配置。
  • Windows:支援 Windows Server 和桌面版本,適合在本機進行開發測試。
  • macOS:開發者經常在 macOS 上搭建本地開發環境,特別是在 Web 開發領域。
  • BSD 系統:如 FreeBSD、OpenBSD,適合高安全性和高性能的伺服器環境。

這種多樣性的系統支援,使得 Apache 能夠在不同規模和需求的專案中靈活應用,無論是小型個人網站還是大型企業應用,Apache 都能勝任。

Apache 在網頁伺服器市場中的地位

  • 持續的市場佔有率:根據 Netcraft 2024 年的統計數據,Apache 依然位居全球伺服器軟體的前列,尤其是在傳統企業和政府機構中仍保持著穩固的地位。
  • 穩定性與長期支持:Apache 的開發團隊保持著長期的版本維護計畫,除了提供新功能,還會定期發布安全更新,確保伺服器的安全性和穩定性。
  • 與其他技術的協作性強:在 LAMP 堆疊(Linux、Apache、MySQL、PHP/Python/Perl)中,Apache 是核心組件之一,這個堆疊是全球許多網站和應用程式的基石。

Apache 的核心功能和特點

靜態與動態內容處理

Apache 是一個功能強大的網頁伺服器,能夠同時處理靜態內容動態內容,滿足不同類型網站的需求:

🛠️ 靜態內容處理

  • 靜態內容指的是不會根據使用者操作而變化的文件,例如 HTML 頁面圖片(JPEG、PNG、SVG)、樣式表 (CSS)前端腳本 (JavaScript)
  • Apache 透過直接從伺服器的檔案系統提供這些資源,使用者請求時,Apache 迅速返回對應的文件,確保快速響應高效能
  • 常用於企業簡介網站、個人作品集、單頁應用(SPA)的初始加載資源等場景。

⚙️ 動態內容處理

  • 動態內容需要根據使用者請求進行處理和生成,例如:數據庫查詢結果、用戶登入狀態、即時數據顯示(如天氣預報、股票數據)。
  • Apache 通過與後端語言和應用程式的整合模組來處理這類請求,支援的語言和技術包括:
    • PHP(mod_php):適合 WordPress、Drupal、Joomla! 等 CMS 系統。
    • Python(mod_wsgi):用於 Flask、Django 等框架。
    • Perl(mod_perl):常見於傳統 CGI 應用程式。
    • Java(透過反向代理與 Tomcat、Jetty 互通):運行企業級應用。
    • 代理 FastCGI(mod_proxy_fcgi):與其他應用伺服器(如 Nginx、Node.js)整合。
  • 這樣的架構使 Apache 能夠勝任從簡單的動態網站(如留言板、部落格)到複雜的應用(如電子商務網站、API 伺服器)的多樣化需求。

如何運作?(簡化的工作流程)

  1. 客戶端請求:使用者在瀏覽器中輸入網站網址,瀏覽器發送 HTTP/HTTPS 請求到伺服器。
  2. 伺服器接收請求:Apache 收到請求後,根據設定檔中的規則(如虛擬主機配置、路徑映射、存取控制)決定如何處理請求。
  3. 處理靜態和動態內容
    • 靜態內容(例如圖片、HTML 文件)由 Apache 直接從伺服器上的檔案系統中提供。
    • 動態內容(例如 PHP 網頁或 API 請求)則會透過模組或外部應用程式處理,生成回應結果。
  4. 返回回應給客戶端:Apache 將處理結果(通常是 HTML 頁面)傳送回客戶端,完成一次完整的請求-回應循環。
flowchart LR
    subgraph Client [客戶端]
        A["客戶端瀏覽器"]
    end
    
    subgraph Server [伺服器]
        B["Apache HTTP Server"]
        C1["靜態內容 (HTML、CSS、圖片)"]
        C2["動態應用程式 (PHP、Python、API)"]
        D1["檔案系統 (靜態資源)"]
        D2["模組或外部應用程式 (mod_php、mod_wsgi)"]
    end
    
    subgraph Response [回應]
        E["返回 HTML 頁面給客戶端"]
    end
    
    A --> B
    B --> C1
    B --> C2
    C1 --> D1
    C2 --> D2
    D1 --> E
    D2 --> E
    E --> A
    
    %% 使用文字標註線條的方式改為更安全的格式
    A -.輸入網址 & 發送請求.-> B
    B -.根據設定檔決定處理方式.-> C1
    B -.根據設定檔決定處理方式.-> C2
    C1 -.提供靜態內容.-> D1
    C2 -.處理動態請求.-> D2
    D1 -.傳送靜態資源.-> E
    D2 -.生成動態內容.-> E
    E -.完成請求-回應循環.-> A

補充:Apache 可以做為應用伺服器?

嚴格來說,Apache HTTP Server 主要是一個Web 伺服器 (Web Server),而非專門的應用伺服器 (Application Server)。然而,Apache 確實可以透過各種模組 (Modules) 支援動態內容的處理,使其具備一定的應用伺服器功能。

🟢 Apache 可作為應用伺服器的情境:

  1. 動態語言支援 (PHP/Python/Perl):
    • 透過 mod_php, mod_wsgi, mod_perl 等模組,Apache 可以直接執行這些語言的應用程式。
    • 適合小型應用、簡單的網站或企業內部工具。
  2. CGI (Common Gateway Interface):
    • Apache 支援 CGI 腳本 (例如 Perl、Python、Shell Script),允許動態生成網頁。
    • 這種方法較舊,效能不高,通常用於小規模動態內容場景。
  3. FastCGI (mod_fcgid):
    • 比 CGI 有更好的效能,適合持久連線的動態應用程式,例如 PHP-FPM (FastCGI Process Manager)。
    • 用於中等流量的應用程式,仍主要針對 PHP。
  4. 反向代理模式 (Reverse Proxy):
    • 配合 mod_proxy,Apache 可以將動態請求轉發到專門的應用伺服器 (例如 Node.js、Tomcat、Django)。
    • 在這種模式下,Apache 充當靜態內容伺服器 + 反向代理,但應用程式邏輯仍由後端應用伺服器處理。

🔴 Apache 作為應用伺服器的限制:

  1. 無法直接提供應用伺服器的高級功能:
    • 缺乏應用伺服器 (如 Tomcat、WildFly) 提供的 J2EE 功能 (例如 EJB、JMS)。
    • 不支援 Enterprise Service (例如 Spring Boot 的嵌入式容器)。
  2. 效能和可擴展性 (Scalability) 的限制:
    • 以 CGI 方式執行應用程式,每個請求都啟動一個新進程,效能較差。
    • 動態模組(如 mod_php)容易造成伺服器內存佔用高,尤其是在處理大量請求時。
  3. 非專用應用伺服器:
    • Apache 主要設計目的是提供靜態內容、負載平衡和反向代理功能,並非像 Nginx、Tomcat、Node.js 那樣專門處理應用邏輯。

建議:Apache + 應用伺服器架構:

  1. 靜態內容: 由 Apache 處理 (例如圖片、HTML、CSS)。
  2. 動態內容: 透過 mod_proxy 代理到真正的應用伺服器 (例如:
    • Python (使用 Gunicorn + Flask/Django)
    • Java (使用 Tomcat/Jetty)
    • Node.js (Express/Koa)
    • PHP (PHP-FPM)
# 反向代理配置示例
ProxyPass /app http://localhost:3000
ProxyPassReverse /app http://localhost:3000

虛擬主機 (Virtual Host)

  • 虛擬主機技術允許在同一台物理伺服器或 IP 位址上運行多個網站,這對於希望降低成本、充分利用伺服器資源的小型企業和共享主機提供商尤為重要。
  • Apache 透過設定 VirtualHost 指令,可以根據不同的域名IP 位址將請求導向不同的網站根目錄。例如:
<VirtualHost *:80>
    ServerName www.site1.com
    DocumentRoot /var/www/site1
</VirtualHost>

<VirtualHost *:80>
    ServerName www.site2.com
    DocumentRoot /var/www/site2
</VirtualHost>
  • 支援兩種類型的虛擬主機:
    • 基於名稱 (Name-based):依據客戶端請求中的域名分配資源,是最常見的類型。
    • 基於 IP (IP-based):為不同網站分配不同的伺服器 IP 位址,適合 SSL/TLS 需求較高的應用(儘管現在透過 SNI (Server Name Indication),名稱型虛擬主機也能支持 HTTPS)。

代理服務與負載均衡

Apache 透過 mod_proxy 和相關模組(如 mod_proxy_httpmod_proxy_balancer)提供反向代理負載均衡功能,這對於大型網站和分佈式應用特別有幫助:

🔁 反向代理 (Reverse Proxy)

  • 充當客戶端和多台後端伺服器之間的中介,接收請求後再轉發給適當的伺服器。
  • 典型應用場景:
    • 安全性提升:隱藏內部伺服器的真實 IP,減少受到攻擊的風險。
    • 資源緩存:通過 mod_cache 儲存靜態資源,減少伺服器負載。
    • 協同運作:與其他伺服器(如 Nginx、Tomcat、Node.js)協同處理動態請求或特定應用。

📊 負載均衡 (Load Balancing)

  • Apache 能根據不同策略(如輪詢 (Round Robin)最少連接 (Least Connections)按流量權重 (Weighted Distribution))將流量分配給多個後端伺服器。
  • 這可以顯著提升網站的可用性(Availability)和容錯能力(Fault Tolerance),當一台伺服器發生故障時,請求會自動導向健康的伺服器,保證服務不中斷。

伺服器擴充性 (Modular Architecture)

  • Apache 採用模組化架構(Modular Architecture),允許根據實際需求動態加載卸載功能模組,這提升了伺服器的靈活性和可擴展性。

常見的 Apache 模組 (Modules)

  • mod_ssl:提供 HTTPS 支援,實現 SSL/TLS 加密,保護網站數據安全。
  • mod_rewrite:強大的 URL 重寫工具,適合製作友好的 SEO URL,或將舊連結重定向到新頁面。
  • mod_proxy:允許 Apache 作為反向代理或負載均衡伺服器。
  • mod_auth_basicmod_auth_digest:提供用戶身份驗證和訪問控制。
  • mod_headers:用於設置 HTTP 標頭,支援安全性相關的標頭(如 Content-Security-Policy, CORS)。

🛠️ 模組管理方法

  • Debian/Ubuntu 系統中,使用以下指令啟用或停用模組:
sudo a2enmod mod_rewrite  # 啟用模組
sudo a2dismod mod_rewrite  # 停用模組
sudo systemctl restart apache2  # 重啟伺服器以應用更改
  • 透過這樣的模組化設計,Apache 能夠根據不同應用場景自由組合功能,避免伺服器資源浪費,並保持高效能和高安全性。

網頁伺服器與反向代理的關係

網頁伺服器的角色

網頁伺服器(Web Server)是網站架構中的核心組件,負責直接處理客戶端請求並提供網站內容。

當使用者在瀏覽器中輸入網址,瀏覽器會向網頁伺服器(例如 Apache、Nginx、IIS)發出請求。

網頁伺服器會根據請求返回相應的靜態(HTML、圖片、CSS、JS)或動態內容(透過 PHP、Python、Node.js 等後端語言生成的內容)。

反向代理的作用

反向代理(Reverse Proxy)則位於客戶端和網頁伺服器之間,充當一個中介者的角色。

它不僅接收所有客戶端的請求,還能根據特定規則將請求轉發給後端的網頁伺服器處理,再將結果返回給客戶端。

🚀 反向代理的常見用途

  • 負載平衡(Load Balancing):將流量分配到多台伺服器,提升網站性能和可靠性。
  • 安全性增強:隱藏後端伺服器的真實 IP,減少攻擊風險。
  • 內容快取(Caching):緩存靜態資源,加速回應時間。
  • SSL 終止(SSL Termination):在反向代理處理 HTTPS 請求,減少後端伺服器加解密的負擔。

Apache 的雙重角色

Apache HTTP Server 除了作為網頁伺服器提供網站內容,還能透過 mod_proxy 模組充當反向代理伺服器。這使 Apache 具有很高的靈活性,特別是在複雜的網站架構中,Apache 可以:

  • 單獨作為網頁伺服器運行小型網站。
  • 作為反向代理,將流量分配到多台後端伺服器(例如 Tomcat)。
  • 與其他反向代理(如 HAProxy、Traefik)協同工作,實現更強大的負載平衡和安全性功能。

網站架構示意圖

這張圖展示了一個簡化的網站架構,主要包含 客戶端 (Client)反向代理 (Reverse Proxy)Web 伺服器 (Nginx)應用伺服器 (Tomcat) 四個部分。每個部分在系統中的角色和數據流如下:

flowchart LR
    subgraph Client
        A[客戶端瀏覽器]
    end
    
    subgraph ReverseProxy
        B["反向代理 (Apache mod_proxy)"]
    end
    
    subgraph WebServers
        C2[Nginx 伺服器]
    end

    subgraph AppServers
        D1[Tomcat 應用伺服器]
    end  
    
    A --> B
    B --> C2
    C2 --> D1
    D1 --> C2
    C2 --> B
    B --> A

架構元件說明

  1. 客戶端 (Client)
    • 客戶端瀏覽器 (例如 Chrome、Edge、Firefox) 發送 HTTP/HTTPS 請求。
    • 用戶在瀏覽器中輸入網址或點擊鏈接,觸發請求發送到伺服器端。
  2. 反向代理 (Apache mod_proxy)
    • Apache 充當 反向代理 (Reverse Proxy) 的角色,使用 mod_proxy 模組。
    • 主要功能:
      • 負載平衡:分配流量到後端伺服器 (Nginx)。
      • 安全防護:隔離內部伺服器,提供防火牆和 DDoS 攻擊緩解。
      • SSL 卸載:處理 HTTPS 加密,減少後端伺服器負擔。
  3. Web 伺服器 (Nginx)
    • Nginx 在此架構中主要負責處理 靜態資源 (如 HTML、CSS、圖片) 和作為動態請求的中介。
    • 當接收到動態內容 (例如 API 請求) 時,將請求轉發到 應用伺服器 (Tomcat)
  4. 應用伺服器 (Tomcat)
    • Tomcat 是一個專門處理 Java Web 應用程式 (如 JSP、Servlet、Spring Boot) 的應用伺服器。
    • 主要負責:
      • 處理業務邏輯 (例如 API 請求)。
      • 生成動態內容 (例如資料庫查詢結果、動態網頁)。
      • 回傳動態生成的內容到 Nginx,再經由反向代理返回客戶端。

資料流向解說

  1. 請求流程:
    • 客戶端 (A) 發送請求 → 反向代理 (B)。
    • 反向代理 (B) 將請求轉發到 Web 伺服器 (Nginx, C2)。
    • Nginx (C2) 判斷請求類型:
      • 靜態資源:由 Nginx 直接提供回應。
      • 動態內容 (例如 Java API 請求):將請求轉發到 Tomcat (D1)。
  2. 回應流程:
    • 動態內容 經 Tomcat (D1) 處理後,生成的結果 (例如 JSON、HTML) 回傳到 Nginx (C2)。
    • Nginx 將處理完成的內容傳回給 反向代理 (B)
    • 最後由 反向代理 (B) 將資料回傳給 客戶端 (A),完成請求-回應循環。

網頁伺服器和反向代理雖然有不同的作用,但在網站架構中經常一起使用,特別是在大型或複雜的專案中,反向代理能顯著提升網站的性能、安全性和靈活性。

Apache HTTP Server 透過 mod_proxy 模組提供反向代理功能,使其在滿足網站服務需求的同時,也能承擔流量分配、SSL 加密、快取加速等高級應用場景。

這種多功能性使 Apache 成為建構網站伺服器架構時的理想選擇之一。


如何安裝 Apache HTTP Server

在 Linux(以 Ubuntu 為例)

sudo apt update
sudo apt install apache2 -y

安裝完成後,可以透過以下指令啟動 Apache:

sudo systemctl start apache2
sudo systemctl enable apache2

在 Windows 系統

  1. 前往 Apache 官方網站下載 Apache Lounge
  2. 解壓縮檔案到 C:\Apache24。
  3. 以系統管理員身份打開命令提示字元,進行安裝:
cd C:\Apache24\bin
httpd.exe -k install

基本設定與伺服器啟動

檢視 Apache 狀態

sudo systemctl status apache2

測試伺服器

開啟瀏覽器並輸入 http://localhost,若看到 “It works!”,代表 Apache 伺服器運行正常。

調整設定檔案

Apache 的主要設定檔位於:

  • Linux: /etc/apache2/apache2.conf
  • Windows: C:\Apache24\conf\httpd.conf

常見指令與操作

  • 啟動服務:sudo systemctl start apache2
  • 停止服務:sudo systemctl stop apache2
  • 重新啟動:sudo systemctl restart apache2
  • 重新加載設定:sudo systemctl reload apache2

設定端口轉移 (Port Forwarding)

設定端口轉移

在 Apache 中,可以使用 mod_proxy 模組將來自 80 端口的請求轉發到本機應用伺服器的 8000 端口,這樣可以讓內部應用不直接暴露在公網中,同時保持統一的訪問入口。

🔧 端口轉移設定範例 (example.conf):

<VirtualHost *:80>
    ServerName www.example.com

    # 啟用端口轉移 (80 -> 8000)
    ProxyPreserveHost On
    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/

    # 記錄錯誤和訪問日誌
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定說明

  • <VirtualHost *:80>:指定 Apache 監聽 80 端口(默認 HTTP 端口)。ProxyPreserveHost On:保留原始請求的主機標頭,讓後端應用知道實際的訪問域名(www.example.com)。ProxyPass & ProxyPassReverse:設定將所有請求 (/) 從 80 端口轉發到本機 8000 端口
  • 當用戶訪問 http://www.example.com 時,實際請求會轉發至 http://localhost:8000 處理。

啟用端口轉移設定

  1. 啟用 Apache 的 Proxy 模組
# 啟用所需模組
sudo a2enmod proxy
sudo a2enmod proxy_http

# 啟用站點設定
sudo a2ensite example.conf

# 重新加載 Apache 配置
sudo systemctl reload apache2
  1. 確認應用服務在 8000 端口運行
sudo lsof -i :8000

若應用已啟動,應顯示 LISTEN 狀態。

測試端口轉移是否正常

  • 在瀏覽器中訪問 http://www.example.com,實際內容應來自 http://localhost:8000
  • 使用 curl 測試 Apache 是否正確轉發:
curl -I http://www.example.com

應能看到後端應用的回應標頭,這意味著端口轉移成功。


故障排除與日誌管理

Apache 會將錯誤和訪問記錄在日誌中,幫助管理員進行排錯。

  • 錯誤日誌/var/log/apache2/error.log
  • 訪問日誌/var/log/apache2/access.log

查看日誌內容

sudo tail -f /var/log/apache2/error.log

檢查設定檔語法

sudo apache2ctl configtest

小結

Apache HTTP Server 是一款功能豐富、靈活且易於入門的網頁伺服器,無論是搭建個人網站、企業應用,還是測試環境,都能提供良好的支持。

希望這篇初學者指南能幫助你快速了解和使用 Apache,進一步提升你的伺服器管理技能。如果你有更多問題,建議參考官方文件或加入相關技術社群討論,持續學習與進步。

Similar Posts