震驚!少年爲何年紀輕輕就頭禿,原來是nginx的路徑拼接沒有搞明白(一篇文章講明白nginx的路徑拼接)

今天有一個需求,就是簡單的一個展示頭像功能,在測試環境是在tomcat裏配置的,沒有問題,但是一到正式環境上就顯示不出來,找了很久才找到問題所在,今天把這個問題排查過程記錄一下。
先說結果主要就是nginx的路徑拼接問題。
需求是這樣滴:用戶修改圖片之後會把圖片的路徑記錄下來,然後利用nginx的靜態資源提供服務功能,來顯示頭像。先頭在配置文件中是這麼配置的

server {
        listen 80;


        server_name api.z.ggpuls.com;


        location /foodie-dev-api/foodie/faces/{
                root  /workspaces/images/foodie/faces/;
        }


}

數據庫是這麼存的

http://api.z.ggpuls.com/foodie-dev-api/foodie/faces/200421AXP0GT3BMW/face-200421AXP0GT3BMW.jpg?t=20200421160623

圖片的存放路徑是這樣的

/workspaces/images/foodie/faces/200421AXP0GT3BMW/face-200421AXP0GT3BMW.jpg

然後就一直訪問不了。
問題解決過程:
第一個問題:root和alias傻傻分不清楚,因爲我的數據庫存放路徑和文件的真實存放路徑是不一樣的,所以不能用root的方式直接拼,而是應該用alias

root實例:
location ^~ /t/ {
     root /www/root/html/;
}

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/t/a.html的文件。
alias實例:
location ^~ /t/ {
alias /www/root/html/new_t/;
}
如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/new_t/a.html的文件。注意這裏是new_t,因爲alias會把location後面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。

當時發現之後美滋滋,心想解決完又可以摸魚了。結果發現我太年輕了。。。。。
在這裏插入圖片描述
第二個問題
localhost匹配規則不明白
localhost匹配規則:

#正則表達式。*代表不區分大小寫
location ~* \.(GIF|png|bmp|jpg|jpeg){
root /home;
}


#精確匹配
location  = /{
root /home;
}


#^~ 以某個字符路徑開頭請求
location ^~ /imooc/img{
root /home;
}

#默認匹配規則
location / {
root /home;
}

因爲我的頭像文件夾爲了方便管理,是按照用戶id去生成的子文件夾,所以精準匹配時不可以的,改成以下這種,終於可以訪問了

server {
        listen 80;


        server_name api.z.ggpuls.com;


        location ^~/foodie-dev-api/foodie/faces/{
                alias  /workspaces/images/foodie/faces/;
        }


}

訪問效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章