Nginx location中alias与root的用法
目录
处理 location 时需要与 root 不同的路径时,会遇到 alias 和 root 的选择问题。
alias 与 root 的区别
nginx 指定文件路径有两种方式:root 和 alias。两者主要区别在于 nginx 如何解释 location 后面的 uri,会使两者以不同的方式将请求映射到服务器文件上。说白了就是两者拼接文件路径的手段不一样。
root 的用法
句法:
root path;
默认值:root html;
语境:http, server, location, if in location
示例:
location ^~ /request_path/dirt/ {
root /local_path/dirt/;
}
当客户端请求 /request_path/image/file.ext 时,Nginx 把请求解析映射为:
/local_path/dirt/request_path/dirt/file.ext
alias 的用法
句法:
alias path;
默认值:-
语境:location
示例:
location /request_path/dirt/ {
alias /local_path/dirt/file/;
}
当客户端请求 /request_path/dirt/file.ext 时,Nginx 把请求映射为:
/local_path/dirt/file/file.ext
注意这里是 file 目录。alias 会把 location 后面配置的路径丢弃掉(比如 /request_path/dirt/one.html,到 alias 那里就剩 one.html 了),把当前匹配到的目录指向到指定的目录。
使用注意
-
使用 alias 时,目录名后面一定要加
/,不然会认为是个文件。 -
alias 在使用正则匹配时,location 后 uri 中捕捉到的内容在指定的 alias 规则内使用:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
- alias 只能位于 location 块中,而 root 的权限不限于 location。
总结
遇到问题不是谁都能解决,但没有解决不了的问题。