「nginx」十、nginx的location配置详解

作者 : 开心源码 本文共2231个字,预计阅读时间需要6分钟 发布时间: 2022-05-11 共69人阅读

location指令是nginx的核心指令,主要使用于路径的匹配路由,这篇文章详情一下location的配置。

location语法

location配置语法:location [=|~|~*|^~] /uri/ { … }

构成:

指令 前缀 uri

location [=|~|~*|^~] /uri

location匹配方式分为普通匹配和正则匹配

使用~和~* 为前缀的匹配是正则匹配,使用=和^~或者没有前缀为普通匹配

~ 前缀表示区分大小写的正则匹配

~* 前缀表示不区分大小写的正则匹配

= 前缀表示准确匹配

^~ 前缀表示uri以某个常规字符串开头,能了解为url的普通匹配

location作使用于server板块,且支持多个location板块

server {

………

location /p {

root html/p;

index index.html index.htm;

}

location = /50x.html {

root html;

}

location / {

root html/server1;

index index.html index.htm;

}

}

在多个location情况下,是按照什么准则进行匹配的呢?

匹配准则

  • 普通匹配准则:最大前缀匹配准则

举例:

server {

location /prefix/ {

#规则A

}

location /prefix/mid/ {

#规则B

}

}

请求url为:/prefix/mid/t.html

此请求匹配的是 规则B,是以最大的匹配准则进行的,跟顺序无关

  • 正则匹配准则:顺序匹配准则

举例:

server {

location ~ \.(gif|jpg|png|js|css)$ {

#规则C

}

location ~* \.png$ {

#规则D

}

}

请求https://img.songma.com/wenzhang/20180605/czi5skepsba2646.png,匹配的是规则C,由于规则C在前面,即叫做顺序匹配

假如location有普通匹配也有正则匹配,那匹配的准则如下

匹配模式及先后顺序

location = /uri    =开头表示准确匹配,只有完全匹配上才可以生效。

location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。

location ~ pattern  ~开头表示区分大小写的正则匹配。

location ~* pattern  ~*开头表示不区分大小写的正则匹配。

location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。

location /      通使用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中default。

首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通使用匹配。

当有匹配成功时候,中止匹配,按当前匹配规则解决请求。

例子,有如下匹配规则:

location = / {

return 200 '规则A';

}

location = /login {

return 200 '规则B';

}

location ^~ /static/ {

return 200 '规则C';

}

location ~ \.(gif|jpg|png|js|css)$ {

return 200 '规则D';

}

location ~* \.js$ {

return 200 '规则E';

}

location / {

return 200 '规则F';

}

那么产生的效果如下:

访问根目录/, 比方http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B,

http://localhost/register 则匹配规则F

http://localhost/static/a.html 将匹配规则C

http://localhost/a.css, 匹配规则D

http://localhost/b.js则优先匹配到 规则D,不会匹配到规则E

http://localhost/static/c.js 则优先匹配到 规则C

http://localhost/a.JS 则匹配规则E, 而不会匹配规则D,由于规则E不区分大小写。

访问 http://localhost/category/id/1111 则最终匹配到规则F,由于以上规则都不匹配,

在实际场景中,通常至少有三个匹配规则定义,如下:

#直接匹配网站根,通过域名访问网站首页比较频繁,用这个会加速解决,官网如是说。

#这里是直接转发给后台应使用服务器了,也能是一个静态首页

第一个必选规则

location = / {

proxy_pass http://tomcat:8080/index

}

第二个必选规则是解决静态文件请求,这是nginx作为http服务器的强项

# 有两种配置模式,目录匹配或者后缀匹配,任选其一或者搭配用

location ^~ /static/ {

root /webroot/static/;

}

location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {

root /webroot/res/;

}

第三个规则就是通使用规则,使用来转发动态请求到后台应使用服务器

#非静态文件请求就默认是动态请求,自己根据实际把握

#毕竟目前的少量框架的流行,带.php,.jsp后缀的情况很少了

location / {

proxy_pass http://tomcat:8080/

}

今天这篇文章希望可以给大家一点帮助,希望持续关注老顾哦

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 「nginx」十、nginx的location配置详解

发表回复