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


}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值