1,location指令
1)用在虚拟服务器server部分,提供来自客户端URI或者内部重定向访问。
当一个请求匹配到了server部分,才会进行loaction的查找
2)location指令,属于ngx_http_core_module模块。
3)定义location可以使用prefix string
location(前缀字符串),也可以使用regular expresstion
location(正则表达式)。
4)nginx首先检查prefix location,使用longest matching prefix
最长前缀匹配规则,记住匹配的location,然后使用regular expression
正则表达式匹配,根据他们在配置文件中的顺序,一旦匹配成功,则停止检索。
5)语法location [ = | ~ | ~* | ^~ ] uri {...}
location @name {...}
6)modifier修饰符。
=
: 精确匹配,匹配成功,则停止搜索正则location; 不能有嵌套的location。可以加速request的处理。
~
: 区分大小写的正则表达式匹配
~ *
:不区分大小写的正则表达式匹配
^ ~
:如果longest matching prefix location
使用该修饰符,则不进行regular expression
的检查。
7)例子
图片请求/images/1.gif ,会匹配location A;/other/1.gif将会匹配 location C; other/1.html将会匹配location B。
location ^~ /image/ {
//config A
}
location /other/ {
//config B
}
location ~* \.(jpg | gif | png | jpef)${
//config C
}
8)slash character (
/
)
proxy_pass中的/
,访问http://oldqi.top/hzq/user.html
location /hzq/ {
proxy_pass http://backend_server; #结尾不带 `/`,将匹配到http://backend_server/hzq/user.html
}
location /hzq/ {
proxy_pass http://backend_server/; # 将匹配到http://backend_server/user.html
}
location中的
/
location /hzq { # 可以匹配uri `/hzq/index.html和/hzqqqq/index.html`
}
location /hzq/ { #只能匹配到`/hzq/xxx不能匹配/hzqqqq/xxx`
}
2,rewrite指令。
使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
在server块中,会先执行rewrite部分,然后才会匹配location块。
1)rewrite regex replacement [flag];
image.png
作用于server,location,if指令。
2)如果regex匹配到URI,会使用replacement来替换URI;rewrite指令会根据在配置文件中出现的顺序依次执行,可以使用flag来终止接下来的处理。
3)如果replacement以http://
或者https://
或者$scheme
,则停止处理,执行重定向,返回到client。
4)break 和last flag。
last停止执行rewrite模块的指令,并根据rewirte规则重新发起请求。
break停止执行rewrite模块的指令,继续执行块中剩余指令。
break.txt last.txt test.txt
该目录下有三个txt文件。
/mytest/test.txt
返回test
/break/break.txt
返回404
/last/last.txt
返回last
redirect 302临时重定向。
permanent 301永久重定向。
3,alias和root用来指定请求资源的真实路径
1)alias只能位于location块中。
root指令,真实的路径是root指定的值加上location指定的值 。
alias指令,真实路径都是 alias 指定的路径。
2)
location /mytest/ {
# 末尾必须带 /
alias /var/hzq/;#请求http://oldqi.top/mytest/1.txt-->http://oldqi.top/var/hzq/1.txt
}
location /mytest/ {
root /var/hzq;#请求http://oldqi.top/mytest/1.txt-->http://oldqi.top/var/hzq/mytest/1.txt
}
网友评论