Apache HTTP Server 是什麼:初學者指南
更新日期: 2025 年 3 月 13 日
本文為 HTTPS 連線 基本介紹,第 1 篇:
- 什麼是代管網域(Domain Hosting)?初學者完整指南
- 網站託管(Web Hosting)入門指南:讓你的網站輕鬆上線
- Cloudflare 介紹:讓網站更安全、更快速的關鍵服務
- 反向代理是什麼?初學者必看詳解
- Apache HTTP Server 是什麼:初學者指南 👈進度
- Django 初學者指南:ALLOWED_HOSTS 設定與安全性考量
- 如何為初學者配置 HTTPS 和 SSL:Cloudflare、Let’s Encrypt 和 Apache 完整指南
- Let’s Encrypt 初學者完全指南
- 虛擬主機(Virtual Host)入門指南:讓你的網站輕鬆上線
- 初學者指南:設定 Apache 反向代理 Django 服務(含 SSL)
- Cloudflare 設定指南:如何正確配置 SSL/TLS 加密模式
- Cloudflare Edge Certificates 入門指南
- 解決 Cloudflare 301 重定向循環問題:初學者指南
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.1 和 HTTP/2 外,還正在開發對 HTTP/3(QUIC) 的支持,保持與現代網路技術的同步。
Apache 也可以與各種後端語言(如 PHP、Python、Perl、Ruby)協作,透過 CGI(Common Gateway Interface)或模組(如 mod_php、mod_wsgi)提供動態網站服務。
適用於部落格、論壇、內容管理系統(CMS)以及 API 伺服器等多種應用場景。
開源與社群支持
Apache 是完全開源的,基於 Apache 2.0 授權,這意味著:
- 任何人都可以免費下載、使用和修改其原始碼。
- 可用於個人、商業或學術用途,沒有授權費用的限制。
- 容易與其他開源項目集成,例如 MySQL、PHP、WordPress 等。
此外,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 伺服器)的多樣化需求。
如何運作?(簡化的工作流程)
- 客戶端請求:使用者在瀏覽器中輸入網站網址,瀏覽器發送 HTTP/HTTPS 請求到伺服器。
- 伺服器接收請求:Apache 收到請求後,根據設定檔中的規則(如虛擬主機配置、路徑映射、存取控制)決定如何處理請求。
- 處理靜態和動態內容:
- 靜態內容(例如圖片、HTML 文件)由 Apache 直接從伺服器上的檔案系統中提供。
- 動態內容(例如 PHP 網頁或 API 請求)則會透過模組或外部應用程式處理,生成回應結果。
- 返回回應給客戶端: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 可作為應用伺服器的情境:
- 動態語言支援 (PHP/Python/Perl):
- 透過
mod_php,mod_wsgi,mod_perl等模組,Apache 可以直接執行這些語言的應用程式。- 適合小型應用、簡單的網站或企業內部工具。
- CGI (Common Gateway Interface):
- Apache 支援 CGI 腳本 (例如 Perl、Python、Shell Script),允許動態生成網頁。
- 這種方法較舊,效能不高,通常用於小規模動態內容場景。
- FastCGI (mod_fcgid):
- 比 CGI 有更好的效能,適合持久連線的動態應用程式,例如 PHP-FPM (FastCGI Process Manager)。
- 用於中等流量的應用程式,仍主要針對 PHP。
- 反向代理模式 (Reverse Proxy):
- 配合
mod_proxy,Apache 可以將動態請求轉發到專門的應用伺服器 (例如 Node.js、Tomcat、Django)。- 在這種模式下,Apache 充當靜態內容伺服器 + 反向代理,但應用程式邏輯仍由後端應用伺服器處理。
🔴 Apache 作為應用伺服器的限制:
- 無法直接提供應用伺服器的高級功能:
- 缺乏應用伺服器 (如 Tomcat、WildFly) 提供的 J2EE 功能 (例如 EJB、JMS)。
- 不支援 Enterprise Service (例如 Spring Boot 的嵌入式容器)。
- 效能和可擴展性 (Scalability) 的限制:
- 以 CGI 方式執行應用程式,每個請求都啟動一個新進程,效能較差。
- 動態模組(如
mod_php)容易造成伺服器內存佔用高,尤其是在處理大量請求時。- 非專用應用伺服器:
- Apache 主要設計目的是提供靜態內容、負載平衡和反向代理功能,並非像 Nginx、Tomcat、Node.js 那樣專門處理應用邏輯。
✅ 建議:Apache + 應用伺服器架構:
- 靜態內容: 由 Apache 處理 (例如圖片、HTML、CSS)。
- 動態內容: 透過
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_http、mod_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_basic、mod_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架構元件說明
- 客戶端 (Client):
- 由 客戶端瀏覽器 (例如 Chrome、Edge、Firefox) 發送 HTTP/HTTPS 請求。
- 用戶在瀏覽器中輸入網址或點擊鏈接,觸發請求發送到伺服器端。
- 反向代理 (Apache mod_proxy):
- Apache 充當 反向代理 (Reverse Proxy) 的角色,使用
mod_proxy模組。 - 主要功能:
- 負載平衡:分配流量到後端伺服器 (Nginx)。
- 安全防護:隔離內部伺服器,提供防火牆和 DDoS 攻擊緩解。
- SSL 卸載:處理 HTTPS 加密,減少後端伺服器負擔。
- Apache 充當 反向代理 (Reverse Proxy) 的角色,使用
- Web 伺服器 (Nginx):
- Nginx 在此架構中主要負責處理 靜態資源 (如 HTML、CSS、圖片) 和作為動態請求的中介。
- 當接收到動態內容 (例如 API 請求) 時,將請求轉發到 應用伺服器 (Tomcat)。
- 應用伺服器 (Tomcat):
- Tomcat 是一個專門處理 Java Web 應用程式 (如 JSP、Servlet、Spring Boot) 的應用伺服器。
- 主要負責:
- 處理業務邏輯 (例如 API 請求)。
- 生成動態內容 (例如資料庫查詢結果、動態網頁)。
- 回傳動態生成的內容到 Nginx,再經由反向代理返回客戶端。
資料流向解說
- 請求流程:
- 客戶端 (A) 發送請求 → 反向代理 (B)。
- 反向代理 (B) 將請求轉發到 Web 伺服器 (Nginx, C2)。
- Nginx (C2) 判斷請求類型:
- 靜態資源:由 Nginx 直接提供回應。
- 動態內容 (例如 Java API 請求):將請求轉發到 Tomcat (D1)。
- 回應流程:
- 動態內容 經 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 系統
- 前往 Apache 官方網站下載 Apache Lounge。
- 解壓縮檔案到 C:\Apache24。
- 以系統管理員身份打開命令提示字元,進行安裝:
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處理。
啟用端口轉移設定
- 啟用 Apache 的 Proxy 模組:
# 啟用所需模組
sudo a2enmod proxy
sudo a2enmod proxy_http
# 啟用站點設定
sudo a2ensite example.conf
# 重新加載 Apache 配置
sudo systemctl reload apache2
- 確認應用服務在 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,進一步提升你的伺服器管理技能。如果你有更多問題,建議參考官方文件或加入相關技術社群討論,持續學習與進步。
