一、什麼是Nginx動靜分離?

簡單來說,動靜分離就是把網站的“靜態資源”和“動態資源”分開處理,讓它們各自走不同的“通道”。

  • 靜態資源:比如圖片(jpg/png)、CSS樣式文件、JavaScript腳本、HTML頁面(非動態渲染的)等。這些文件通常不變化,訪問頻率高,適合直接從Nginx快速返回。
  • 動態資源:比如PHP腳本、後端接口(如Python/Java寫的API)、數據庫查詢等。這些需要服務器計算或查詢數據,處理耗時,適合交給後端服務器專門處理。

Nginx作爲高性能Web服務器,天生擅長處理靜態資源。動靜分離的核心是讓Nginx專注“靜態資源的快速響應”,動態資源則通過反向代理交給後端(如PHP-FPM、Node.js),從而提升網站加載速度和穩定性。

二、爲什麼需要動靜分離?

  1. 用戶體驗更好:靜態資源由Nginx直接返回,無需經過後端計算,頁面加載時間大幅縮短。比如一個網頁有10張圖片,靜態資源分開加載會更快,用戶等待時間減少。
  2. 減輕後端壓力:動態資源(如PHP解析、數據庫查詢)通常更耗CPU/內存。動靜分離後,後端只處理動態請求,服務器負載降低,穩定性更高。
  3. 擴展性更強:靜態資源可輕鬆遷移到CDN(內容分發網絡),用戶就近獲取資源;動態資源也可通過負載均衡,由多臺後端服務器分擔壓力。

三、Nginx如何實現動靜分離?

核心原理:通過Nginx的location指令匹配不同請求類型,分別處理靜態和動態資源。

1. 靜態資源處理

location匹配靜態資源的常見後綴(如.jpg.js.css等),通過root指令指定靜態文件路徑,Nginx直接返回文件。

2. 動態資源處理

location匹配動態請求(如.php/api等),通過proxy_passfastcgi_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),讓網站更高效穩定。

小夜