震惊!少年为何年纪轻轻就头秃,原来是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/;
        }


}

访问效果:
在这里插入图片描述

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