官方文档
http://nginx.org/en/docs/http/ngx_http_core_module.html#aliashttp://nginx.org/en/docs/http/ngx_http_core_module.html#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 路径
- alias 是一个目录别名的定义,root则是最上层目录的定义;
- alias 后面必须要用
/
结束,否则会找不到文件的,而 root 则可有可无; - alias 只能位于 location 块中;
- alias 在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用;
作用域
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
题外话: alias 下防止目录穿越
简介
Nginx在配置别名 (Alias) 的时候, 如果 location
路径忘记加 /
结尾, 同时开启了 autoindex
目录共享功能,将造成一个目录穿越漏洞。
nginx目录穿越漏洞原理
- 修改 nginx.conf ,在如下图位置添加如下配置
在如下配置中设置目录别名时 /files
配置为 /home/
的别名,那么当我们访问 /files../
时, nginx 实际处理的路径时 /home/../
,从而实现了穿越目录
这个应该是跟版本无关,是配置出现了问题。
漏洞利用效果
漏洞修复
修改
/usr/local/nginx/conf/nginx.conf
,把filebug
使用/
闭合
nginx目录遍历漏洞原理
Nginx的目录遍历与apache一样,属于配置方面的问题,错误的配置可导致目录遍历与源码泄露
修改 nginx.conf ,在如下图位置添加 autoindex on
漏洞利用效果
漏洞修复
改为off
即可,默认也为off
参考连接: