location的语法规则
location 主要分为几个语法类型
符号类 [= ~ ~* ^~]
目录类 /xxx/
通用请求类 /
符号类解释
= 普通字符串精确匹配
^~ 带参数前缀匹配,当前只匹配该参数,其他的一律不匹配
~ 正则匹配,区分请求的大小写
~* 正则匹配,不区分请求的大小写
/x 普通前缀匹配
/ 一般为通用请求,无匹配时使用,对比上面优先级最小
上顺序为例,从上到下依次优先级降低
TIP A:
“=”,
示范
location = /A001 {
return 301 https://baidu.com;
}
则请求的时候需要请求的URL后缀
/A001 200OK
/A001/ 404
TIP B:
“^~”
示范
location ^~ /A001/ {
return 301 https://baidu.com;
}
如果写入该参数,则服务器仅匹配/A001/为目录参数开头的请求
例如
http://test.com/A001/ 200OK
http://test.com/A001/x 200OK
http://test.com/A001 404
如果遇到其他设置均由^~参数来处理
TIP C:
“~”
示范
location ~ /A001 {
return 301 https://baidu.com;
}
请求区分大小写,则请求的参数与设置参数的大小写不一致,则返回404,如果服务器上面设置文件里面含上面的TIP B参数则下面所有参数全部中断请求
例如
http://test.com/A001 200OK
http://test.com/a001 404
http://test.com/A000 404
TIP D:
“~*”
示范1
location ~* .(png|jpg|gif)$ {
}
当需要请求静态文件的时候,不区分静态文件后缀的大小写
例如
http://test.com/1.Png 200OK
http://test.com/1.PNG 200OK
http://test.com/1.png 200OK
示范2
location ~* /ABC {
}
当请求携带目录的时候,不区分目录的大小写
例如
http://test.com/ABC 200OK
http://test.com/Abc 200OK
http://test.com/abc 200OK
http://test.com/abcd 404
如果在整体参数中间出现^~,则以^~为默认请求匹配,不请求~*参数匹配
TIP E:
“/xxx”
示范1
location /test {
}
当请求不携带任何参数的时候,默认匹配携带参数
例如
http://test.com/test 200OK
http://test.com/ 404
示范2
location /test2 {
}
例如
http://test.com/test2 200OK
http://test.com/test3 404
该请求匹配通用匹配中存在特定字符串的匹配
TIP F:
“/”
示范
location / {
}
此请求优先级最低,可以自定义目录请求
例如
http://test.com/ 200OK
http://test.com/ABC 200OK PS:前提是该网站默认目录下存在/ABC目录,否则返回404
http://test.com/i/1.png 200OK PS:前提是该网站的/i目录下存在1.png这个文件,否则返回404
该请求参数为所有请求参数中间优先级最低请求
综上参数TIP编号为例
优先级顺序为 A>B>C>D>E>F,F为优先级最低
------------------------------------分割符号------------------------------------
扩展应用
某网站的/admin目录(不区分大小写)不能通过域名test.com访问到,如果访问则返回403或者404错误
server {
listen 80;
server_name test.com;
location / {
root /var/www/test.com;
index index.html index.htm;
}
location ~* /admin {
return 403;
}
某网站test.com在访问/index目录的时候(不区分大小写)需要嵌套访问或者跳转到该网站公司的其他子网站http://test2.com/index 上
嵌套访问方法,使用反向代理
server {
listen 80;
server_name test.com;
location / {
root /var/www/test.com;
index index.html index.htm;
}
location ~* /index {
proxy_pass http://test2.com/index;
}
重定向方法,使用301
server {
listen 80;
server_name test.com;
location / {
root/var/www/test.com;
index index.html index.htm;
}
location ~* /index {
return 301 http://test2.com/index;
}
某网站访问的时候只允许访问默认页面,不得用任何URL做任何自定义请求,否则返回403
server {
listen 80;
server_name test.com;
location = / {
root /var/www/test.com;
index index.html index.htm;
}
评论