linux高阶-Nginx服务(四)-location中root指令和alias的使用

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

  • 其实,location块匹配到对应的url以后,还能干很多别的事情,当location块匹配到url以后具体执行什么操作,取决于你在location块中配置了哪些指令。

  • location其实是server的⼀个指令,为nginx服务器提供⽐较多⽽且灵活的指令,都是在location中提现的,主要是基于nginx接受到的请求字符串,对⽤⼾请求的UIL进⾏匹配,并对特定的指令进⾏处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三⽅模块的配置也是在location模块中配置。

  • 关于location可能还需要单独写一篇文章,这里暂时放一放,本篇文章主要说的时怎样把url与服务器路径建立起对应的关系,既然要聊的话题是要将url和路径建立起关联关系,不如就从root指令开始聊起,在前文中我们已经初步接触过root指令,但是并没有详细的描述过怎样使用root指令,那么这篇文章我们就来通过一些示例来演示怎样使用root指令,其实,除了root指令,还有另一个指令也能实现类似的功能,他就是alias指令,root指令和alias指令能将url和服务器路径进行对应,但是它们之间又存在一些区别,我们这就聊聊它们。

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

grep -v "#" /apps/nginx/conf/nginx.conf | grep -v "^$"
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
		index index.html index.htm;
        location / {
            root   html;
        }
	    location /demo{   #看这里
		    root  /opt/root_test;   #看这里
	    }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 上例中,location块匹配到的url为"/demo",root指令的路径为"/opt/root_test",那么,根据上述配置,当我们访问"/demo"这个url的时候,实际上访问的到底是服务器中的那个路径呢?答案为"/opt/root_test/demo"路径,怎么得到的答案呢?方法其实很简单,我们只需要将location中的rul添加到root指令对应的路径后面即可,得到最终服务器访问的路径,具体方法如下图所示:

在这里插入图片描述

  • 也就是说,上述配置表示,当我们访问"/demo"这个url时,实际访问的时服务器的"/opt/root_test/demo"目录,那么,让我们来验证一下,看看实际情况如何,首先,我们先创建"/opt/root_test/demo"目录,并在此目录中放置一张示例图片以便演示,示例图片为ms.jpg,我已经在默认的的server块中配置了上图的location,然后重载配置。

  • 浏览器访问http://172.20.26.104/demo/ms.jpg最终效果如下:

在这里插入图片描述

  • 通过上图可以看到,当我们访问"/demo/ms.jpg"时,访问的其实就是"/opt/root_test/demo/ms.jpg"
grep -v "#" /apps/nginx/conf/nginx.conf | grep -v "^$"
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
		index index.html index.htm;
        location / {
            root   html;
        }
        location /demo{   
		    root  /opt/root_test;   
	    }
	    location /demo/test{   #看这里
		    root  /opt/root_test;   #看这里
	    }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 通过上面的演示,你肯定已经明白了location和root结合后建立了怎样的对应关系,那么,我们来举一反三试试,配置上述location块之后我们访问"/demo/test/ms.jpg"这个url时,我们访问的是哪个目录的文件呢?你肯定已经猜到了答案,答案就是"/opt/root_test/demo/test/ms.jpg"

  • 浏览器访问http://172.20.26.104/demo/test/ms.jpg最终效果如下:

在这里插入图片描述

  • 刚才提到过,除了root指令,alias指令也能将url与服务器路径进行关联,那么我们来看一个alias指令的小示例,如下:
grep -v "#" /apps/nginx/conf/nginx.conf | grep -v "^$"
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
		index index.html index.htm;
        location / {
            root   html;
        }
        location /demo{   
		    root  /opt/root_test;   
	    }
	    location /demo/test{   
		    root  /opt/root_test;  
	    }
        location /demo1{    #看这里
            alias /opt/alias_test;   #看这里
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 如你所见,alias指令对应的值也是一个路径,当alias指令与location块结合时,它们会怎样建立url与服务器路径的对应关系呢?答案是:上面的配置表示,当我们访问"/demo1/ms.jpg"时,其实我们访问的是服务器的"/opt/alias_test/ms.jpg",也就是说,当我们使用alias时,location的url是与alias的路径完全相等的。

  • 浏览器访问http://172.20.26.104/demo1/ms.jpg最终效果如下:

在这里插入图片描述

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

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

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

  • 其实,除了上述区别,alias指令和root指令能够处于的上下文位置也不同,查看nginx官方手册(查看官方文档的方法已经上一篇介绍了,可以用于参考),可以看下alias指令和root指令的语法说明如下:

  • root

在这里插入图片描述

  • alias

在这里插入图片描述

  • 从官网信息可以看出,alias指令只能在location块中使用,而root指令则不然。
以上就是root指令和alias指令之间区别简单的描述,希望对阅读文章的你有所帮助😉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章