Nginx是一款高性能的Web服務器和反向代理服務器,它的配置文件是管理網站和服務的核心。對於新手來說,理解配置文件中的Server塊和location是入門的關鍵。
Nginx配置文件的基本結構¶
Nginx的主配置文件(通常是nginx.conf)由多個“塊”組成,就像一個層級分明的配置樹。最外層的塊可以分爲:
- 全局塊:影響整個Nginx服務的基礎配置,比如
worker_processes(工作進程數,建議設爲CPU核心數)、error_log(錯誤日誌路徑)等。 - events塊:定義網絡連接相關的設置,比如
worker_connections(每個工作進程的最大連接數)。 - http塊:包含多個Server塊,定義HTTP服務器的整體特性,比如
keepalive_timeout(長連接超時時間)、gzip壓縮等。
每個塊用大括號{}包裹,內部是具體指令,指令以分號;結尾。
Server塊:虛擬主機的核心¶
Server塊用於定義“虛擬主機”,即不同網站的獨立配置。一臺服務器可以通過不同域名或端口運行多個網站,每個網站對應一個Server塊。
Server塊基本結構示例:¶
server {
listen 80; # 監聽80端口(HTTP默認端口)
server_name example.com; # 匹配域名(如example.com或www.example.com)
root /var/www/example; # 網站文件根目錄(請求路徑從這裏查找文件)
index index.html; # 默認首頁(找不到具體文件時返回該頁面)
}
關鍵指令說明:¶
listen:指定Nginx監聽的端口(如listen 8080監聽8080端口)。server_name:匹配域名或IP,多個域名用空格分隔(如server_name a.com b.com)。root:網站文件的根目錄,請求路徑會拼接在root後(如訪問/會找/var/www/example/index.html)。index:指定默認首頁,按順序嘗試(如先找index.html,再找index.php)。
location塊:按路徑分配請求¶
location塊用於根據請求的URL路徑,決定如何處理請求(如返回靜態文件、轉發動態請求)。
常見location匹配類型:¶
- 前綴匹配:
location /static/匹配所有以/static/開頭的路徑,優先級低於精確匹配。
location /static/ {
root /var/www/static; # 靜態文件放在/var/www/static下
expires 7d; # 瀏覽器緩存7天(減少重複請求)
}
此時訪問example.com/static/image.jpg,會返回/var/www/static/image.jpg。
- 精確匹配:
location = /僅匹配根路徑/,優先級最高。
location = / {
root /var/www/example;
index index.html; # 根路徑直接返回首頁
}
- 正則匹配:用
~(區分大小寫)或~*(不區分大小寫)匹配路徑,常用於匹配文件後綴。
location ~* \.(jpg|png|gif)$ { # 匹配所有圖片文件(不區分大小寫)
root /var/www/images;
expires 30d; # 圖片緩存30天
}
- API/動態請求匹配:
location /api/匹配所有以/api/開頭的路徑,用於轉發給後端服務(如Node.js、Java)。
location /api/ {
proxy_pass http://127.0.0.1:3000; # 轉發到後端API服務
proxy_set_header Host $host; # 傳遞原域名
}
location匹配優先級:¶
精確匹配(=) > 帶^~的前綴匹配(如location ^~ /static/) > 普通前綴匹配(/static/) > 正則匹配(~) > 默認匹配(/)
綜合配置示例¶
以下是一個完整的Server塊+location塊配置,包含靜態文件、動態請求和API轉發:
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html index.php;
# 1. 靜態文件處理(CSS、JS、圖片)
location /static/ {
root /var/www/static;
expires 7d; # 靜態文件緩存7天
}
# 2. 圖片文件單獨處理(正則匹配)
location ~* \.(jpg|png|gif)$ {
root /var/www/images;
expires 30d;
}
# 3. 動態請求(PHP/後端服務)
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # 轉發給PHP-FPM服務(默認9000端口)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; # 引入FastCGI參數(如PATH_INFO等)
}
# 4. 單頁應用(SPA)路由
location / {
try_files $uri $uri/ /index.html; # 找不到文件時返回index.html
}
}
配置驗證與生效¶
修改配置後,需驗證並重啓Nginx:
1. 檢查配置語法:nginx -t(Nginx會輸出配置是否有誤)。
2. 重載配置:nginx -s reload(無需停止服務,直接生效新配置)。
3. 重啓服務:nginx -s stop(先停止)或nginx -s quit(優雅停止)後nginx啓動。
總結¶
Nginx配置的核心是Server塊(定義網站)和location塊(按路徑分配請求)。新手可先掌握基礎配置:監聽端口、域名、靜態文件路徑,再逐步學習動態請求轉發、緩存等高級功能。通過實際配置和測試,能更快理解兩者的配合邏輯。