Loading... <blockquote>博主会将与Nginx有关的知识点总结到”<a title="Nginx由浅入深短篇系列" href="https://www.zsythink.net/archives/tag/nginx/" target="_blank" rel="noopener">nginx短篇系列</a>“文章中,如果你对nginx不是特别了解,请按照顺序阅读”nginx短篇系列”,以便站在前文的基础上理解新的知识点。</blockquote> 通过前文我们已经知道,在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指令的示例,如下: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">location /demo </span><span class="enlighter-g1">{</span></div> </div> <div class=""> <div><span class="enlighter-text"> root /opt/test;</span></div> </div> <div class=""> <div><span class="enlighter-g1">}</span></div> </div> </div> </div> 上例中,location块匹配的url为”/demo”,root指令的路径为”/opt/test”,那么,根据上述配置,当我们访问”/demo”这个url时,实际上访问的到底是服务器中的哪个路径呢?答案是”/opt/test/demo”路径,怎么得到这个答案呢?方法很简单,我们只需要将location中的url添加到root指令对应的路径后面,即可得到最终的服务器路径,具体方法如下图所示: <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2019/02/020219_1348_locationroo1.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2019/02/020219_1348_locationroo1.png" style=""> 也就是说,上述配置表示,当我们访问”/demo”这个url时,实际访问的是服务器的”/opt/test/demo”目录,那么,我们来验证一下,看看实际情况如何,首先,创建”/opt/test/demo”目录,并在此目录中放置一张示例图片以便演示,示例图片名称为”nginx.jpg”,我已经在默认的server块中配置了上图中的location,重载配置,确定配置生效后,访问链接”http://10.1.1.72/demo/nginx.jpg”,最终效果如下: <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2019/02/020219_1348_locationroo2.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2019/02/020219_1348_locationroo2.png" style=""> 可以看到,当我们访问”/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指令的小示例,如下: <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">location /demo1 </span><span class="enlighter-g1">{</span></div> </div> <div class=""> <div><span class="enlighter-text"> alias /opt/test;</span></div> </div> <div class=""> <div><span class="enlighter-g1">}</span></div> </div> </div> </div> 如你所见,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指令的语法说明如下: <blockquote>Syntax: alias path; Default: — Context: location</blockquote> <blockquote>Syntax: root path; Default: root html; Context: http, server, location, if in location</blockquote> 从官网信息可以看出,alias指令只能在location块中使用,而root指令则不然。 上述内容,就是root指令和alias指令之间的区别。 转载自朱双印日志https://www.zsythink.net/archives/3186 Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏