Nginx 學習系列(三) ------------- alias、root指令區別

擁抱心中的夢想發表於2019-02-22

最近剛好幫一位同事解決一個關於nginx靜態資源配置的小問題。雖然很小,但是還是琢磨了許久,不是nginx坑了我,就是我太菜了。哈哈,想著還是把這點小知識記錄下來,後期遇到同樣的問題可以提高效率。

一、先看小需求

需求很簡單,大致就是:當url中以/res為字首時,表示該請求是靜態資源請求,並將其重定向到靜態資源路徑去拿靜態資源。

舉個例子:

當訪問路徑是:http://127.0.0.1:8080/res/風景.jpg時,此時nginx應該返回一張美麗的風景圖片.

Nginx 學習系列(三) ------------- alias、root指令區別

二、nginx配置

這是一個再簡單不過的需求了,使用nginx的配置如下:

location /res/ {
    root   f:/res/; 
}
複製程式碼

當匹配/res/字首時,訪問f:/res/目錄下的靜態資原始檔。圖片"風景.jpg"存放在f:/res/目錄下。

啟動nginx後發現下面請求顯示404

http://localhost/res/風景.jpg

檢視日誌後發現,nginx實際上找的是f:/res/res/風景.jpg這個路徑下的圖片,但由於f:/res/res/沒有這個圖片當然報404啦!

現在我們將上面的nginx配置改成:

location /res/ {
    alias   f:/res/; 
}
複製程式碼

啟動nginx後發現下面請求正常顯示圖片。

http://localhost/res/風景.jpg

檢視日誌後發現,nginx實際上找的是f:/res/風景.jpg這個路徑下的圖片,但由於f:/res/有這個圖片當然不報404啦!

三、結論

aliasroot指令的區別就是:

  • 1、root不會將location配置的路徑去掉 也就是請求http://localhost/res/xxx,不會忽略localhost的配置,反而會加在root配置的路徑後面,變成f:/res/res/xxx

  • 2、alias會將location配置的路徑去掉

也就是請求http://localhost/res/xxx,會忽略localhost的配置,不會加在alias配置的路徑後面,變成f:/res/xxxlocation/res/被忽略了。

最後,不要在postman上面訪問中文名稱的請求,比如http://localhost/res/風景.jpg,由於postman不支援中文,永遠都會顯示404,不然你會說為什麼明明配置對了,在postman還不生效,哈哈,最後懷疑人生。

相關文章