Nginx 虛擬主機設定與管理實戰
在現代 Web 伺服器架構中,Nginx 因其高併發處理能力與低資源佔用,成為許多開發者與系統管理員的首選。對於中階 Linux 使用者而言,掌握 Nginx 的虛擬主機(Virtual Host)設定不僅是基礎技能,更是實現多網站託管、環境隔離與流量分發的關鍵。本文将深入探討如何在 Ubuntu 22.04 或 Debian 12 系統上,從零開始建立、配置及管理 Nginx 虛擬主機。
環境準備與目錄結構
在開始之前,請確保您的系統已安裝 Nginx。若尚未安裝,可執行以下指令:
sudo apt update
sudo apt install nginx
Nginx 的虛擬主機設定檔預設存放在 /etc/nginx/sites-available/ 目錄中,而實際生效的連結則位於 /etc/nginx/sites-enabled/。這種「可用(available)」與「啟用(enabled)」分離的設計,讓管理者能輕鬆地切換網站狀態,而不必擔心誤刪配置。
建立第一個虛擬主機
假設我們要為 example.com 建立一個新的虛擬主機。首先,我們需要創建對應的網站根目錄,並放置一個測試頁面。
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>Welcome to Example.com!</h1>" | sudo tee /var/www/example.com/html/index.html
接著,在 /etc/nginx/sites-available/ 目錄下建立新的設定檔 example.com:
sudo nano /etc/nginx/sites-available/example.com
將以下內容貼上並儲存。這裡我們特別指定 server_name 為 example.com 及其 www 子域名,並設定正確的 root 路徑。
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
啟用虛擬主機與載入設定
設定檔建立完成後,必須建立符號連結至 sites-enabled 目錄,才能讓 Nginx 讀取該配置。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
為了避免潛在的衝突,建議檢查是否還有預設的 default 設定檔干擾。如果不需要預設頁面,可以將其移除或禁用:
sudo rm /etc/nginx/sites-enabled/default
在重新載入服務前,務必先測試語法是否正確,這能避免伺服器因配置錯誤而無法啟動:
sudo nginx -t
若輸出結果顯示 syntax is ok 和 test is successful,則可執行以下指令重新載入 Nginx:
sudo systemctl reload nginx
此時,透過瀏覽器訪問 http://example.com(請確保 DNS 已正確指向伺服器 IP),即可看到歡迎頁面。
常見問題排查
1. 403 Forbidden 錯誤
當訪問網站出現 403 錯誤時,通常與檔案權限或 SELinux/AppArmor 有關。在 Ubuntu/Debian 環境中,最常見的原因是目錄權限未開放。請確認 /var/www/example.com 及其子目錄對 www-data 使用者具有讀取權限:
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com
2. 設定未生效
有時修改設定後重新載入,但瀏覽器緩存或 DNS 解析未更新,導致舊內容顯示。除了確認 DNS 解析正確外,可嘗試清除瀏覽器緩存,或檢查 /etc/hosts 檔案中是否有本地覆蓋設定。此外,使用 curl -I http://example.com 指令可以快速檢查 HTTP 回應標頭,確認 Nginx 是否正確回應了狀態碼與內容類型。
小結
透過本文的實戰操作,我們學會了如何建立 Nginx 虛擬主機、配置基本參數、啟用網站以及排查常見問題。虛擬主機的管理核心在於「配置分離」與「權限控制」。隨著網站數量增加,建議進一步學習使用 Nginx 的 include 功能模組化配置,或導入 Let's Encrypt 實現 HTTPS 自動憑證簽發,以提升安全性與管理效率。掌握這些基礎後,您將能更自信地應對複雜的 Web 託管需求。