nginx短篇(5):在location中使用root和alias

  • A+
所属分类:Nginx  运维技术

  

博主会将与Nginx有关的知识点总结到"nginx短篇系列"文章中,如果你对nginx不是特别了解,请按照顺序阅读"nginx短篇系列",以便站在前文的基础上理解新的知识点。

 

通过前文我们已经知道,在nginx中,我们可以通过location块与root指令结合的方式,将"url"与"服务器路径"建立起对应关系,location块负责匹配url,root指令负责将匹配到的url与服务器中某个具体目录对应起来。

 

其实,location块匹配到对应的url以后,还能干很多别的事情,当location块匹配到url以后具体执行什么操作,取决于你在location块中配置了哪些指令,关于location的话题可能还需要单独写一篇文章来描述,此处我们先行略过,本文关注的重点是怎样将url与服务器路径建立起对应关系,既然要聊的话题是要将url和路径建立起关联关系,不如就从root指令开始聊起,在前文中我们已经初步接触过root指令,但是并没有详细的描述过怎样使用root指令,那么此处我们就来通过一些示例来演示怎样使用root指令,其实,除了root指令,还有另一个指令也能实现类似的功能,它就是alias指令,root指令和alias指令都能将url和服务器路径进行对应,但是,它们之间又存在一些区别,这篇文章就来详细的聊聊它们。

 

先从root指令开始,我们先来看一个root指令的示例,如下:

上例中,location块匹配的url为"/demo",root指令的路径为"/opt/test",那么,根据上述配置,当我们访问"/demo"这个url时,实际上访问的到底是服务器中的哪个路径呢?答案是"/opt/test/demo"路径,怎么得到这个答案呢?方法很简单,我们只需要将location中的url添加到root指令对应的路径后面,即可得到最终的服务器路径,具体方法如下图所示:

nginx短篇(5):在location中使用root和alias

也就是说,上述配置表示,当我们访问"/demo"这个url时,实际访问的是服务器的"/opt/test/demo"目录,那么,我们来验证一下,看看实际情况如何,首先,创建"/opt/test/demo"目录,并在此目录中放置一张示例图片以便演示,示例图片名称为"nginx.jpg",我已经在默认的server块中配置了上图中的location,重载配置,确定配置生效后,访问链接"http://10.1.1.72/demo/nginx.jpg",最终效果如下:

nginx短篇(5):在location中使用root和alias

可以看到,当我们访问"/demo/nginx.jpg"时,访问的其实就是"/opt/test/demo/nginx.jpg"。

 

通过上述描述,你肯定已经明白了location和root结合后建立了怎样的对应关系,那么,我们来举一反三试试,配置上述location块后,当我们访问"/demo/test1/nginx.jpg"这个url时,我们访问的是哪个目录中的文件呢?你肯定已经想到了正确答案,答案就是"/opt/test/demo/test1/nginx.jpg"

 

刚才提到过,除了root指令,alias指令也能将url与服务器路径进行关联,那么我们来看一个alias指令的小示例,如下:

如你所见,alias指令对应的值也是一个路径,当alias指令与location块结合时,它们会怎样建立url与服务器路径的对应关系呢?答案如下:上例配置表示,当我们访问"/demo1/nginx1.jpg"时,其实就是在访问服务器的" /opt/test/nginx1.jpg",也就是说,当我们使用alias时,location的url是与alias的路径完全对等的。

 

看到此处,root指令和alias指令的区别就很明显了。

root指令会将location块的"url路径"带入到"root指令路径"中,将带入后的路径作为"最终路径",使用"最终路径"与url建立对应关系。

alias指令则直接将location块的"url路径"与"alias指令路径"建立对应关系。

 

其实,除了上述区别,alias指令和root指令能够处于的上下文位置也不同,查看nginx官方手册(查看官方文档的方法前文已经介绍过,如果忘记请回顾前文),可以看到alias指令和root指令的语法说明如下:

Syntax: alias path;

Default: —

Context: location

 

Syntax: root path;

Default: root html;

Context: http, server, location, if in location

从官网信息可以看出,alias指令只能在location块中使用,而root指令则不然。

 

上述内容,就是root指令和alias指令之间的区别。

  

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  4   博主  2

    • avatar Dracary 2

      想知道这个博客是怎么搭建的。。

        • avatar 朱双印 Admin

          @Dracary LNMP或LAMP加WordPress

            • avatar liangliang 0

              @朱双印 wordpress也可以做这么漂亮,你这个按钮是通过插件吗?

          • avatar wanghao 0

            终于更新了。。群主,你这个是设置的多少访问限定啊。

              • avatar 朱双印 Admin

                @wanghao 话说兄dei···别爬了行么,你也是执着,403这么多次都还这么坚持,我这边邮件都收烦了

              • avatar 等待 3

                沙发,沙发。