【Nginx实战】location匹配规则详解

719 阅读2分钟

      在Nginx配置中,location指令是最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求直接拒绝并返回403、404、500错误处理等。

1、location匹配规则规则说明:

符号含义
=字面精准匹配,如果匹配,则跳出匹配过程(不再进行正则匹配)
~开头区分大小写的正则匹配
~*开头不区分大小写的正则匹配
^~开头表示uri以某个常规字符串开头,理解为匹配url路径即可
/通用匹配,在没有正则表达式匹配时,任何请求都会匹配到
@不是普通的location匹配,用于location内部重定向的变量

多个location配置的匹配顺序:

  • 首先匹配:"="
  • 其次匹配:"^~"
  • 再匹配:文件location书写顺序
  • 若没有匹配到,最后把所有请求交给通配符("/")
  • 当有匹配成功时候,停止匹配,按当前匹配规则处理请求

当nginx收到一个请求后,会截取请求的URI部份,去搜索所有location指令中定义的URI匹配模式。
在server模块中可以定义多个location指令来匹配不同的url请求,多个不同location配置的URI匹配模式,
总体的匹配原则是:先匹配普通字符串模式,再匹配正则模式。
只识别URI部份

2、location配置示例:

#访问:http://localhost/
#匹配规则:
location = / {
   #规则A
}

#访问:http://localhost/login
#匹配规则:
location = /login {
   #规则B
}

#访问:http://localhost/static/a.html
#匹配规则:
location ^~ /static/ {
   #规则C
}

#访问:http://localhost/a.gif、http://localhost/b.jpg
#匹配规则:
location ~ \.(gif|jpg|png|js|css)$ {
   #规则D
}

#访问:http://localhost/a.PNG
#匹配规则:
location ~* \.png$ {
   #规则E
}

#访问:http://localhost/register、http://localhost/category/id/1111
#匹配规则:
location / {
   #规则F
}

3、location常用场景:

实际使用中,至少有三个匹配规则定义,如下:
1.第一个必选规则:直接匹配网站根
通过域名访问网站首页比较频繁,使用这个会加速处理
这里是直接转发给后端应用服务器了,也可以是一个静态首页

第一个必选规则
location = / {
    proxy_pass http://locolhost/index
}

第二个必选规则:处理静态文件请求

这是 nginx 作为 http 服务器的强项
处理静态文件请求,有两种配置模式,
目录匹配或后缀匹配,
任选其一或搭配使用

location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

第三个规则:通用规则
用来转发动态请求到后端应用服务器
非静态文件请求就默认是动态请求,自己根据实际把握

location / {
    proxy_pass http://localhost/
}

# 禁止访问.sh后缀的文件实例

server{
	location ~.*\.(sh)${
		return 405;
	}
}

表示当访问 "*.sh"的文件就会返回405错误