nginx location 的root和alice

4 篇文章 0 订阅
2 篇文章 0 订阅

           上周四,有用户反映线上app中的的某个网页打不开,返回404,地址类似:http://xxx.xxx.com/projectContext/appWeb/page/device/deviceList.html

            背景:由于之前后端项目的重构,所有的请求路径,后端服务器已经不支持/projectContext前缀了,但是为了能兼容老版本的接口,故在nginx中做了路径匹配转发

           原有的nginx配置:

#对所有静态资源做了分离 规则A
location  ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js|html)$ {
        root  /opt/www/wx_app_static_page/;
        expires 30d;
}
#兼容老版/projectContext的请求路径 规则B
location /projectContext {
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_pass http://app.com/;
}

#所有动态请求动态转发给后端服务器列表 规则C
location /{
 	proxy_set_header Host $host;
 	proxy_set_header X-Real-IP $remote_addr;
 	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://app.com/;
}

     乍一看,没什么问题,html请求确实被匹配到 规则A,但是仔细看,会发现/opt/www/wx_app_static_page/并没有  /projectContext/appWeb/page/device/deviceList.html这个路径,而真正的文件是在/opt/www/wx_app_static_page/appWeb/page/device/deviceList.html下,所以才会404

     找到问题了,开始着手解决;于是想当然的加上下面的配置:

#匹配/projectContext/appWeb的请求
location ^~ /projectContext/appWeb/{
                 root   /opt/www/wx_app_static_page/appWeb/;
}
     重新加载nginx配置后,再访问上面那个路径,发现还是404,于是开启nginx日志,发现请求的html被定位到/opt/www/wx_app_static_page/appWeb/ projectContext/appWeb/page/device/deviceList.html;  会比正确的路径(/opt/www/wx_app_static_page/appWeb/page/device/deviceList.html) 多上匹配规则的前缀;于是乎,想起nginx还支持alias, alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录,正合我意

   于是nginx配置改为:

location ^~ /projectContext/appWeb/{
                 alias  /opt/www/wx_app_static_page/appWeb/$1;
}
  重新加载配置,访问之前的url,发现一切正常。

总结:

1:root不会丢弃location后面配置的路径,而alias会丢弃,把当前匹配到的目录指向到指定的目录

2:使用alias时,目录名后面一定要加"/"

3:alias只能位于location块中


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值