Nginx 配置文件中location标签的学习
语法规则
1 | location [/|=|~|~*|^~] url {} |
修饰符
/
通配符,如果没有找到任何匹配规则,则执行该项;=
表示精确匹配。只有请求的url路径与后面的字符完全匹配时,才会执行;~
表示该规则是使用正则表达式,区分大小写 ;~*
表示该规则时使用正则表达式,不区分大小写 ;^~
表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找,该项不是正则表达式;
URL匹配过程
location有两种表达形式:前缀字符\正则规则
匹配过程
- 首先检查使用前缀 字符定义的
location
,选择最长匹配项并记录下来; - 如果找到了精确匹配的
location
,也就是使用了=
的location
,则执行该项,结束查找; - 如果没有精确匹配,则开始寻找使用正则表达定义的
location
,如果找到匹配项,则执行,结束查找; - 如果没有找到匹配的正则
location
,则使用前面记录的最长匹配前缀字符location
;
- 首先检查使用前缀 字符定义的
Tips
- 使用正则表达的
location
按照出现的先后顺序查找,优先执行先匹配到的正则location
; - 使用精确匹配
=
可以提高查找速度;
- 使用正则表达的
实例说明
1 | location = / {A} |
location @的用法
- 前面我们看到了
location
有2种表达的方式,location @
用来内部重定向,不能用来处理正常的请求; - 用法:
1
2
3
4
5
6location / {
try_files $url $url/ @inside # 当尝试访问url url/时,找不到对应的文件,则重定向到@inside
}
location @inside {
........
}
location扩展
- 临时跳转
- 临时需要将原有的url跳转到新的url,可以使用精确匹配,并将其放置在其他location之前
location /admin {return 302 http://newurl/;}
访问控制
- 有一些目录为了安全,我们想限制访问,仅允许某些ip地址访问,如需使用此功能,nginx需要安装ngx_http_stus_status_module模块
1
2
3
4
5
6
7
8location /admin {
stub_status; # 开启ngx_http_stub_status_module模块;
allow 127.0.0.1;
allow ip1;
allow ip2;
deny all;
}
- 有一些目录为了安全,我们想限制访问,仅允许某些ip地址访问,如需使用此功能,nginx需要安装ngx_http_stus_status_module模块
列出目录
1
2
3
4
5
6
7location ^~ /filesys {
autoindex on; # 开启目录索引
autoindex_exact_size off; # 默认为on,显示文件的确切大小,单位为byte;
# 改为off后,显示文件的大概大小,单位为kb、MB、GB
autoindex_localtime on; # 默认为off,显示的文件时间为GMT时间;
# 改为on后,显示的文件时间为文件服务器的时间
}