[toc]
nginx location
匹配语法
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
location [匹配模式] uri {
...
}
location匹配规则
匹配规则总览
匹配模式 | 匹配符 | 优先级 |
---|---|---|
精确匹配 | = | 1 |
前缀匹配 | ^~ | 2 |
正则匹配 | ~ | 3 |
正常匹配 | uri | 4 |
全匹配(通用匹配) | / | 5 |
匹配规则细分
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 不区分大小写不匹配的正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |
location匹配优先级
路径匹配优先级
- 精确匹配 > 前缀匹配 > 正则匹配 > 正常匹配 > 全匹配
匹配示例
精确匹配
⚠️server_name _ 中的_只是一个无效域名的表示方法
编辑nginx配置文件
server {
listen 80;
server_name _;
# 第1段
location /nginx {
#return 200 "aaa";
root /data/nginx/html4/;
index index.html;
}
# 第2段
location = /nginx {
#return 200 "bbb";
root /data/nginx/html3/;
index index.html;
}
}
创建网站根目录
mkdir -p /data/nginx/html{3,4}/nginx
echo 'html3' >/data/nginx/html3/nginx/index.html
echo 'html4' >/data/nginx/html4/nginx/index.html
访问测试
$ curl 127.0.0.1/nginx
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
$ curl 127.0.0.1/nginx/
html4
精确匹配中 /nginx/
中优先匹配到第2段,再访问 /nginx/index.html
,此次内部跳转uri已经是 /nginx/index.html