一、什麼是Nginx動靜分離?¶
簡單來說,動靜分離就是把網站的“靜態資源”和“動態資源”分開處理,讓它們各自走不同的“通道”。
- 靜態資源:比如圖片(jpg/png)、CSS樣式文件、JavaScript腳本、HTML頁面(非動態渲染的)等。這些文件通常不變化,訪問頻率高,適合直接從Nginx快速返回。
- 動態資源:比如PHP腳本、後端接口(如Python/Java寫的API)、數據庫查詢等。這些需要服務器計算或查詢數據,處理耗時,適合交給後端服務器專門處理。
Nginx作爲高性能Web服務器,天生擅長處理靜態資源。動靜分離的核心是讓Nginx專注“靜態資源的快速響應”,動態資源則通過反向代理交給後端(如PHP-FPM、Node.js),從而提升網站加載速度和穩定性。
二、爲什麼需要動靜分離?¶
- 用戶體驗更好:靜態資源由Nginx直接返回,無需經過後端計算,頁面加載時間大幅縮短。比如一個網頁有10張圖片,靜態資源分開加載會更快,用戶等待時間減少。
- 減輕後端壓力:動態資源(如PHP解析、數據庫查詢)通常更耗CPU/內存。動靜分離後,後端只處理動態請求,服務器負載降低,穩定性更高。
- 擴展性更強:靜態資源可輕鬆遷移到CDN(內容分發網絡),用戶就近獲取資源;動態資源也可通過負載均衡,由多臺後端服務器分擔壓力。
三、Nginx如何實現動靜分離?¶
核心原理:通過Nginx的location指令匹配不同請求類型,分別處理靜態和動態資源。
1. 靜態資源處理¶
用location匹配靜態資源的常見後綴(如.jpg、.js、.css等),通過root指令指定靜態文件路徑,Nginx直接返回文件。
2. 動態資源處理¶
用location匹配動態請求(如.php、/api等),通過proxy_pass或fastcgi_pass將請求轉發給後端服務器(如PHP-FPM、Node.js)。
四、實戰配置步驟(以PHP網站爲例)¶
假設你的網站結構:
- 靜態資源(圖片、CSS、JS)放在 /usr/share/nginx/html/static 目錄下;
- 動態資源(PHP文件)放在 /usr/share/nginx/html 目錄下,需由PHP-FPM(默認監聽 127.0.0.1:9000)處理。
1. 修改Nginx配置文件¶
找到Nginx的站點配置文件(如Ubuntu下的 /etc/nginx/sites-available/default),在server塊中添加以下內容:
server {
listen 80;
server_name yourdomain.com; # 替換爲你的域名或IP
# 1. 處理靜態資源(匹配常見後綴)
location ~* \.(jpg|jpeg|png|gif|js|css|html|htm|ico)$ {
root /usr/share/nginx/html/static; # 靜態資源路徑
expires 7d; # 緩存靜態資源7天(瀏覽器7天內不重複請求)
add_header Cache-Control "public, max-age=604800"; # 明確緩存策略
index index.html; # 默認首頁
}
# 2. 處理動態資源(PHP請求)
location ~ \.php$ {
root /usr/share/nginx/html; # PHP文件根目錄
fastcgi_pass 127.0.0.1:9000; # 轉發給PHP-FPM
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; # 加載FastCGI參數
}
# 3. 其他請求(如根目錄首頁)
location / {
root /usr/share/nginx/html;
index index.html index.php;
}
}
2. 驗證配置並重啓Nginx¶
- 檢查配置語法:
sudo nginx -t # 提示“test is successful”說明配置無誤
- 重啓Nginx:
sudo systemctl restart nginx # Ubuntu/Debian
# 或
sudo service nginx restart # CentOS
3. 測試動靜分離是否生效¶
- 靜態資源測試:在
/usr/share/nginx/html/static下放一張圖片test.jpg,訪問http://yourdomain.com/static/test.jpg,若能顯示圖片則成功。 - 動態資源測試:在
/usr/share/nginx/html下放test.php(內容<?php phpinfo(); ?>),訪問http://yourdomain.com/test.php,若顯示PHP配置信息則成功。
五、總結¶
Nginx動靜分離的核心是用location區分靜態和動態請求,讓Nginx處理靜態資源,後端處理動態請求。關鍵步驟:
1. 用~*匹配靜態資源後綴(如\.(jpg|js|css)$);
2. 用root指定靜態文件路徑;
3. 用fastcgi_pass轉發動態請求給後端(如PHP-FPM)。
配置完成後,網站加載速度會明顯提升,服務器壓力降低。後續可進一步優化(如Gzip壓縮、靜態資源CDN),讓網站更高效穩定。