Nginx
高效能網頁伺服器與反向代理
軟體分類 程式開發 / 伺服器
軟體標籤
樂理創作iQrator推薦軟體最新軟體情報Adobe Animate
開發廠商 F5, Inc. (Originally by Igor Sysoev)
產品說明
Nginx (發音同 "Engine X") 是一款以高效能、高併發與低記憶體消耗著稱的網頁伺服器、反向代理伺服器以及電子郵件(IMAP/POP3)代理伺服器。
它最初由俄羅斯工程師 Igor Sysoev 開發,旨在解決著名的 C10k 問題(即如何同時處理一萬個併發連線)。與傳統使用 Process/Thread 模型的 Apache HTTP Server 不同,Nginx 採用了非同步事件驅動 (Asynchronous Event-driven) 架構。這使得它在處理靜態檔案、索引檔案以及自動索引時,效率極高且資源佔用極低。如今,它已成為全球流量最大的網站(如 Netflix, Dropbox, WordPress)背後的首選伺服器軟體,經常作為前端負載平衡器,將流量分發給後端的應用伺服器(如 Python, Ruby, PHP)。
核心特色:
- 高併發處理:事件驅動架構允許在低硬體配置下處理數萬甚至數十萬的同時連線。
- 反向代理與負載平衡:內建強大的負載平衡功能(Round Robin, Least Connected, IP Hash),可作為應用程式的統一入口。
- 靜態內容快取:極致優化的靜態檔案傳輸效能,並支援 FastCGI, uwsgi, SCGI 等快取機制。
- 模組化設計:支援動態模組載入,可擴充 Gzip 壓縮、SSL/TLS 加密、HTTP/2 與 HTTP/3 (QUIC) 支援。
- 熱部署 (Hot Deployment):支援在不中斷服務的情況下升級執行檔或重新載入設定檔。
常用指令
Nginx 主要透過修改設定檔 (nginx.conf) 運作,並使用命令列工具進行控制。
服務控制
# 啟動 Nginx
sudo systemctl start nginx
# 或直接執行 binary
sudo nginx
# 停止 Nginx
sudo nginx -s stop
# 優雅停止 (處理完目前的請求後再關閉)
sudo nginx -s quit
# 重新載入設定檔 (不中斷服務,最常用)
sudo nginx -s reload
設定檔檢查與除錯
在重新載入服務之前,務必檢查語法是否正確,避免服務掛掉。
# 檢查設定檔語法是否正確
sudo nginx -t
# 顯示目前的版本與編譯參數
nginx -V
核心設定檔範例 (nginx.conf)
Nginx 的設定檔結構清晰,由區塊 (Block) 組成:
# 定義工作處理程序數量 (通常設為 CPU 核心數)
worker_processes auto;
events {
worker_connections 1024;
}
http {
# 包含 MIME 類型定義
include mime.types;
# 定義虛擬主機 (Virtual Host)
server {
listen 80;
server_name example.com;
# 靜態檔案根目錄
location / {
root /var/www/html;
index index.html;
}
# 反向代理設定 (轉發給後端 API)
location /api/ {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
}
}
}
進階技巧
- 反向代理 (Reverse Proxy):這是 Nginx 最強大的功能之一。透過
proxy_pass指令,你可以隱藏後端真實伺服器的 IP,並統一處理 SSL 憑證與跨網域 (CORS) 設定。 - 速率限制 (Rate Limiting):為了防止 DDoS 攻擊或暴力破解,可以使用
limit_req_zone與limit_req指令來限制單一 IP 的請求頻率。 - URL 重寫 (Rewrite):支援強大的 Regex 規則,可將舊的 URL 結構 301 重新導向到新網址,對 SEO 非常重要。