最近恰好幫一位同事解決一個關於nginx靜態資源配置的小問題。雖然很小,可是仍是琢磨了許久,不是nginx坑了我,就是我太菜了。哈哈,想着仍是把這點小知識記錄下來,後期遇到一樣的問題能夠提升效率。nginx
需求很簡單,大體就是:當url中以/res
爲前綴時,表示該請求是靜態資源請求,並將其重定向到靜態資源路徑去拿靜態資源。bash
舉個例子:post
當訪問路徑是:http://127.0.0.1:8080/res/風景.jpg
時,此時nginx應該返回一張美麗的風景圖片.ui
這是一個再簡單不過的需求了,使用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啦!
alias
和root
指令的區別就是:
一、root
不會將location
配置的路徑去掉 也就是請求http://localhost/res/xxx
,不會忽略localhost
的配置,反而會加在root
配置的路徑後面,變成f:/res/res/xxx
二、alias
會將location
配置的路徑去掉
也就是請求http://localhost/res/xxx
,會忽略localhost
的配置,不會加在alias
配置的路徑後面,變成f:/res/xxx
,location
的/res/
被忽略了。
最後,不要在postman上面訪問中文名稱的請求,好比http://localhost/res/風景.jpg
,因爲postman不支持中文,永遠都會顯示404,否則你會說爲何明明配置對了,在postman還不生效,哈哈,最後懷疑人生。