目錄
- 1. 對url的匹配
- 1.1 默認匹配
- 1.2 精確匹配( = )
- 1.3 正則,區分大小寫 ( ~ )
- 1.4 正則表達式,不區分大小寫 ( ~* )
- 2. 匹配順序
- 2.1 示例(精確匹配最高)
- 2.2 示例(字串匹配次之)
- 2.3 示例(正則匹間配高于通用匹配)
- 2.4 示例(正則表達式間前邊的為準)
- 2.5 示例(通用匹配兜底)
- 3. 匹配間的沖突
- 3.1 通用匹配 VS 字串匹配
1. 對url的匹配
1.1 默認匹配
- 語法示例
location /crow/ {
return 501 "通用匹配\n";
}
1.2 精確匹配( = )
- 語法示例
location = /crow/ {
return 501 "精確匹配\n";
}
1.3 正則,區分大小寫 ( ~ )
- 語法示例
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
1.4 正則表達式,不區分大小寫 ( ~* )
- 語法示例
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
2. 匹配順序
- 精確匹配(
=) - 字串匹配(
^~) - 正則匹配(
~、~*) - 默認匹配()
2.1 示例(精確匹配最高)
- 配置文件內容:
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location = /crow/test.md {
return 501 "精確匹配\n";
}
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 訪問測試
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 精確匹配
可見精確匹配被匹配到。
下邊我們去掉精確匹配:
2.2 示例(字串匹配次之)
- 配置文件內容:
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
#location = /crow/test.md {
# return 501 "精確匹配\n";
#}
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 訪問測試
如下可見,還剩 字串匹配、正則匹配、通用匹配,結果匹配到了 字串匹配。
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 字串匹配
2.3 示例(正則匹間配高于通用匹配)
- 配置文件
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
#location = /crow/test.md {
# return 501 "精確匹配\n";
#}
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
#location ^~ /crow/test.md {
# return 501 "字串匹配\n";
#}
}
- 訪問測試
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正則表達式,區分大小寫
2.4 示例(正則表達式間前邊的為準)
上例中我們看到:~在前邊,因此先匹配了 ~。如果我們把~和~*換個位置
- 配置文件
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
}
- 訪問測試
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.md 正則表達式,不區分大小寫
2.5 示例(通用匹配兜底)
配置文件
我們還是將所有匹配都寫上
server {
listen 1840;
root /usr/share/nginx/html;
location / {
index index.html index.php index.htm;
}
location /crow/ {
return 501 "通用匹配\n";
}
location = /crow/test.md {
return 501 "精確匹配\n";
}
location ~ /crow/.*\.md {
return 501 "正則表達式,區分大小寫\n";
}
location ~* /crow/.*\.md {
return 501 "正則表達式,不區分大小寫\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
}
- 訪問測試
[root@liubei nginx-crow-test]# curl http://localhost:1840/crow/test.txt 通用匹配
3. 匹配間的沖突
3.1 通用匹配 VS 字串匹配
通用匹配和字串匹配相同時,啟動報錯
- 配置文件
location /crow/test.md {
return 501 "通用匹配\n";
}
location ^~ /crow/test.md {
return 501 "字串匹配\n";
}
- 啟動報錯如下:
nginx-crow-test | nginx: [emerg] duplicate location "/crow/test.md" in /etc/nginx/conf.d/default.conf:45
以上就是nginx location指令(實戰示例匹配順序匹配沖突)使用詳解的詳細內容,更多關于nginx location指令的資料請關注其它相關文章!






