爲什麼用Nginx做靜態資源服務?

Nginx是一款高性能的HTTP和反向代理服務器,非常適合處理靜態資源(如圖片、CSS、JS、PDF等)。相比傳統服務器,它輕量、穩定,能同時處理大量併發請求,且配置簡單。對於圖片、文件這類無需後端動態處理的資源,用Nginx託管可以大大提升訪問速度,節省服務器資源。

一、準備工作:安裝Nginx

1. 檢查系統與安裝

  • Ubuntu/Debian系統
  sudo apt update  # 更新軟件源
  sudo apt install nginx  # 安裝Nginx
  • CentOS/RHEL系統
  sudo yum install nginx  # 安裝Nginx

2. 啓動Nginx並驗證

sudo systemctl start nginx  # 啓動Nginx
sudo systemctl enable nginx  # 設置開機自啓
sudo systemctl status nginx  # 檢查狀態(應顯示active)

驗證是否安裝成功:打開瀏覽器訪問 http://localhost,看到Nginx默認歡迎頁面即表示安裝成功。

二、核心配置:讓Nginx託管靜態資源

1. 找到配置文件目錄

Nginx的配置文件通常存放在 /etc/nginx/ 目錄下。爲了方便管理,我們可以在 conf.d/ 子目錄中新建配置文件(例如 static.conf):

sudo vim /etc/nginx/conf.d/static.conf

2. 編寫配置文件

static.conf 中輸入以下內容(以圖片和文件訪問爲例):

server {
    listen 80;  # 監聽80端口(HTTP默認端口)
    server_name localhost;  # 本地測試用localhost,也可填服務器IP

    # 匹配圖片請求(例如訪問 http://localhost/images/xxx.jpg)
    location /images/ {
        root /var/www/static;  # 圖片實際存放路徑(會拼接路徑:/var/www/static/images/xxx.jpg)
        autoindex on;  # 開啓目錄瀏覽(訪問文件夾時顯示文件列表)
        autoindex_exact_size off;  # 顯示文件大小(單位:KB/MB,而非字節)
        autoindex_localtime on;  # 顯示文件修改時間(本地時間)
    }

    # 匹配文件下載請求(例如訪問 http://localhost/files/xxx.pdf)
    location /files/ {
        root /var/www/static;  # 文件實際存放路徑(會拼接路徑:/var/www/static/files/xxx.pdf)
        autoindex on;  # 同上,開啓目錄瀏覽
    }
}

3. 解釋關鍵配置項

  • root:指定資源的根目錄,例如 location /images/ 會將請求的 /images/xxx.jpg 映射到 root + /images/xxx.jpg(即 /var/www/static/images/xxx.jpg)。
  • autoindex on:當訪問一個目錄(如 /images/)時,Nginx會列出該目錄下的所有文件,方便用戶直接下載。
  • 其他參數autoindex_exact_size offautoindex_localtime on 用於美化目錄列表,顯示更友好的文件信息。

三、創建資源目錄並測試訪問

1. 創建實際資源目錄

根據配置文件中的 root 路徑,創建對應的目錄和測試文件:

sudo mkdir -p /var/www/static/images  # 圖片目錄
sudo mkdir -p /var/www/static/files    # 文件目錄

# 放入測試圖片(例如1.jpg)
sudo cp /path/to/your/image.jpg /var/www/static/images/1.jpg  

# 放入測試文件(例如test.pdf)
sudo cp /path/to/your/file.pdf /var/www/static/files/test.pdf  

2. 加載配置並測試

sudo nginx -t  # 檢查配置文件是否有語法錯誤(必須無錯誤才能繼續)
sudo systemctl reload nginx  # 重載配置文件(無需重啓Nginx)

測試圖片訪問:打開瀏覽器訪問 http://localhost/images/1.jpg,若能顯示圖片則成功。
測試文件列表:訪問 http://localhost/images/(目錄),應顯示 1.jpg 等文件,點擊即可下載。
測試文件下載:訪問 http://localhost/files/test.pdf,Nginx會自動觸發文件下載。

四、常見問題與解決

1. 配置不生效?

  • 檢查配置路徑:確認 root 路徑是否與實際文件目錄一致,且Nginx用戶(Ubuntu爲 www-data,CentOS爲 nginx)有讀取權限:
  sudo chown -R www-data:www-data /var/www/static  # 賦予權限
  sudo chmod -R 755 /var/www/static  # 目錄權限(可讀可執行)
  • 重載配置:修改配置後必須執行 nginx -t 檢查,再用 systemctl reload nginx 生效。

2. 目錄列表不顯示?

  • 確保 autoindex on 已添加到 location 塊中,且目錄下有文件。

3. 訪問權限403?

  • 檢查Nginx用戶是否有權限讀取文件:
  sudo ls -la /var/www/static  # 查看目錄所有者和權限

五、總結

Nginx搭建靜態資源服務非常簡單,核心是通過 locationroot 配置資源路徑,並利用 autoindex 實現目錄瀏覽。適合快速託管圖片、文檔等靜態資源,提升訪問速度和服務器穩定性。

如果需要更復雜的功能(如圖片壓縮、防盜鏈、用戶認證),可以在此基礎上進一步擴展配置。對於初學者,掌握基礎的圖片和文件訪問已足夠應對多數場景。

小夜