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

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

1、先看小需求

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

舉個例子:post

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

2、nginx配置

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

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

當匹配/res/前綴時,訪問f:/res/目錄下的靜態資源文件。圖片"風景.jpg"存放在f:/res/目錄下。spa

啓動nginx後發現下面請求顯示4043d

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

查看日誌後發現,nginx實際上找的是f:/res/res/風景.jpg這個路徑下的圖片,但因爲f:/res/res/沒有這個圖片固然報404啦!code

如今咱們將上面的nginx配置改爲:cdn

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

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

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

查看日誌後發現,nginx實際上找的是f:/res/風景.jpg這個路徑下的圖片,但因爲f:/res/有這個圖片固然不報404啦!

3、結論

aliasroot指令的區別就是:

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

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

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

最後,不要在postman上面訪問中文名稱的請求,好比http://localhost/res/風景.jpg,因爲postman不支持中文,永遠都會顯示404,否則你會說爲何明明配置對了,在postman還不生效,哈哈,最後懷疑人生。

相關文章
相關標籤/搜索