龙空技术网

Nginx系列:root与alias指令用法的区别

BUG弄潮儿 1114

前言:

此时咱们对“nginxroot无效”可能比较注重,咱们都需要分析一些“nginxroot无效”的相关资讯。那么小编也在网络上收集了一些关于“nginxroot无效””的相关知识,希望我们能喜欢,大家一起来学习一下吧!

root和alias属于nginx的核心模块ngx_http_core_module的两个指令。从官网的如下链接看到root和alias

的基本语法

root指令语法

语  法:    root path;默认值:    root html;配置段:    http, server, location, if in location
alias指令语法

语  法:    alias path;默认值:    —配置段:    location

从语法上看root和alias指令都可以定义在location模块中,都是用来指定映射服务器静态资源文件的命令。例如,访问的html文件、视频、图片文件等都可以通过root和alias指令配置访问。虽然使用方法比较相似,但是非常容易混淆,特别是root命令的使用方式,经常会被误解。

0x01:root与alias用法演示

root配置如下

location /blog/ {        root /usr/local/nginx/html;        index index.html index.htm;}

请求 这个地址时,那么在服务器里面对应的真正的资源是 /usr/local/nginx/html/blog/root.html文件。可以发现真实的路径是root指定的值加上location指定的值。

alias配置如下

location /blog/ {        alias /usr/local/nginx/html/;        index index.html index.htm;}

同样请求时,在服务器查找的资源路径是:/usr/local/nginx/html/alias.html。正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的真实路径都是alias指定的路径.。

注:可以把/usr/local/nginx/html/alias.html目录下的alias.html移到/usr/local/nginx/html/blog/alias.html目录下,在访问,直接返回404.html

0x02:root、alias与location

location & root

location和root组合相当于在root指定目录下进行location匹配,location所匹配内容必须保证在root指定目录的子目录,否则配置无效,而且location只能向下匹配,不能匹配location指定目录上一级目录中的内容。

location & alias

location与alias组合,需要保证location匹配目录与alias指定目录级别相同,否则配置无效;与location和root组合相同的是,location所匹配内容也只能向下匹配。

root与alias的区别

root与alias主要区别是如何解释location后面的uri

root的处理结果:root路径+location路径alias的处理结果:使用alias路径替换location路径alias是一个目录别名的定义,root则是最上层目录的定义。
alias只能作用在location中,而root可以存在server、http和location中;alias后面必须要用 “/” 结束,不然会被认为是个文件,而找不到对应的目录;而root则对 “/” 可有可无alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用

这条可以参考官网如下章节:

alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用,按照个人意思的理解就是正则表达式一定要匹配到内容,然后再alias中引用,不知道是否理解有误不??

然后官网给出了一种推荐使用的方案,如下图的情况使用root代替alias。

演示:

在nginx的配置文件nginx.conf

 location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {    alias /usr/local/nginx/html/images/$1;}   

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$:这条正则表达式的意思是以/users/开头,区分大小写匹配gif、jpeg、jpg、png这四种图片文件

访问如下资源路径

标签: #nginxroot无效