Nginx location指令和rewrite指令,root和alias

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];
作用于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模块的指令,继续执行块中剩余指令。

image.png

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
}

你可能感兴趣的:(Nginx location指令和rewrite指令,root和alias)