5分钟搞懂nginx的location匹配规则
目录
- 概述
- location介绍
- location指令语法
- location配置实例解析
- location常用场景实战
- 禁止访问.sh后缀的文件实例
- php7进阶到架构师相关阅读
概述
这是关于php进阶到架构之Nginx进阶学习的第一篇文章:5分钟搞懂nginx的location匹配规则
- 第一篇:5分钟搞懂nginx的location匹配规则
location介绍
location指令是http模块当中最核心的一项配置,
根据预先定义的URL匹配规则来接收用户发送的请求,
根据匹配结果,将请求转发到后台服务器、
非法的请求直接拒绝并返回403、404、500错误处理等。
location指令语法
location [=|~|~*|^~|@] /uri/ { … }
或 location @name { … }
规则说明:

nginx匹配规则说明
多个location配置的匹配顺序:
- 首先匹配:"="
- 其次匹配:"^~"
- 再匹配:文件location书写顺序
- 若没有匹配到,最后把所有请求交给通配符("/")
- 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
当nginx收到一个请求后,
会截取请求的URI部份,
去搜索所有location指令中定义的URI匹配模式。
在server模块中可以定义多个location指令来匹配不同的url请求,
多个不同location配置的URI匹配模式,
总体的匹配原则是:先匹配普通字符串模式,再匹配正则模式。
只识别URI部份
location配置实例解析
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location / {
#规则F
}
访问 http://localhost/
匹配规则 A
访问 http://localhost/login
匹配规则 B
访问http://localhost/register
匹配规则 F
访问 http://localhost/static/a.html
匹配规则 C
访问 http://localhost/a.gif, http://localhost/b.jpg
匹配规则 D和规则 E,
但是规则 D 顺序优先,
规则 E不起作用
访问 http://localhost/static/c.png
满足条件的有规则C,D,E
但由于~^/static/优先级高,故匹配规则C
访问 http://localhost/a.PNG
匹配规则 E,而不会匹配规则 D,
因为规则 E 不区分大小写
访问 http://localhost/category/id/1111
最终匹配到规则 F,因为以上规则都不匹配
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错误
php7进阶到架构师相关阅读
https://www.kancloud.cn/gofor/gofor