1、结论
-
root
匹配的目录:root
的值 +location
的值 +URL
剩余的path
-
alias
匹配的目录:alias
的值 +URL
剩余的path
,抛弃location
的值
2、location
的最左匹配原则
location /bar {
root /home/hfy/;
}
http://example.com/foo/bar/hello.html
不会命中该location
,因为从url
中的/foo
开始匹配,与location
/bar
不一致,不会命中,如果url
更改为http://example.com/bar/hello.html
才会命中该规则
3、index index.html
在location
内部其实默认配置了一条规则index index.html
- 访问
http://example.com/foo/bar/
时,返回index
指定的文件 - 在访问
http://example.com/foo/bar
,如果匹配到文件夹,nginx
会自动301重定向为http://example.com/foo/bar/
,并返回index
指定的文件
4、URL
末尾斜杠/
http://example.com/foo/bar/
:表示想要访问bar
文件夹
http://example.com/foo/bar
:表示想要访问bar
文件,如果是文件夹nginx
会自动重定向为http://example.com/foo/bar/
5、root
最后的斜杠
- location的斜杠:
-
location /foo/
:只能匹配http://example.com/foo/
-
location /foo
:能匹配http://example.com/foo
和http://example.com/foo/
-
- 配置:
-
root /home/
:只把/home/
当做目录 -
root /home
:把/home
当做目录,或者文件
-
6、alias
最后的斜杠
- location的斜杠:
-
location /foo/
:表示访问文件夹 -
location /foo
:表示访问文件
-
- 配置:
-
alias /home/
:只把/home/
当做目录 -
alias /home
:只把/home
当做文件
-
7、最佳实践
-
location
都加斜杠,URL
匹配有斜杠,服务器指向文件夹 - 配置都使用
alias
,可以忽略location
的值,直接用alias
+URL
其他path
-
alias
最后都加斜杠,服务器指向文件夹 - 访问文件的情况,可以单独开一个指向文件的
location