一文说明Nginx的alias与root区别


以前只知道 Nginx 的 location 块中的 root 用法,用起来总是感觉满足不了自己的一些想法。然后终于发现了 alias 这个东西。


配置用法

  • 先看root的用法

    location /request_path/image/ {
    
    	root /local_path/image/;
    
    }

    这样配置的结果就是当客户端请求 /request_path/image/cat.png 的时候,

    Nginx把请求映射为 /local_path/image/request_path/image/cat.png

  • 再看 alias 的用法

    location /request_path/image/ {
    
    	alias /local_path/image/;
    
    }

    这时候,当客户端请求 /request_path/image/cat.png 的时候,

    Nginx把请求映射为 /local_path/image/cat.png


小结

主要区别

在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

  • root的处理结果是:root路径 + location路径
  • alias的处理结果是:使用 alias 路径替换 location 路径
  1. alias 是一个目录别名的定义,root则是最上层目录的定义;
  2. alias 后面必须要用 / 结束,否则会找不到文件的,而 root 则可有可无;
  3. alias 只能位于 location 块中;
  4. alias 在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用;

作用域

[root]
语法:root path
默认值:root html
配置段:http、server、location、if

[alias]
语法:alias path
配置段:location

题外话: alias 下防止目录穿越

简介

Nginx在配置别名 (Alias) 的时候, 如果 location 路径忘记加 / 结尾, 同时开启了 autoindex 目录共享功能,将造成一个目录穿越漏洞。

nginx目录穿越漏洞原理

  1. 修改 nginx.conf ,在如下图位置添加如下配置

在如下配置中设置目录别名时 /files 配置为 /home/ 的别名,那么当我们访问 /files../ 时, nginx 实际处理的路径时 /home/../ ,从而实现了穿越目录

这个应该是跟版本无关,是配置出现了问题。

  • 漏洞利用效果

  • 漏洞修复

    修改 /usr/local/nginx/conf/nginx.conf ,把 filebug 使用 / 闭合

nginx目录遍历漏洞原理

Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露

修改 nginx.conf ,在如下图位置添加 autoindex on

  • 漏洞利用效果

  • 漏洞修复
    改为 off 即可,默认也为 off


参考连接:


文章作者: NesTeaLin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 NesTeaLin !
  目录