网站首页 > 技术教程 正文
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
}
}
请求http://localhost/1.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/
}
今天这篇文章希望能给大家一点帮助,希望持续关注老顾哦
猜你喜欢
- 2024-10-10 推荐几个开源的个人独立博客系统(开源个人博客源码下载)
- 2024-10-10 Kubernetes 之 Nginx 动静态 PV 持久存储 下篇
- 2024-10-10 FreeMarker-静态模板的使用与生成
- 2024-10-10 使用nginx做前端服务器可以设置类似的静态文件客户端缓存
- 2024-09-12 使用nginx部署前端html等静态页面
- 2024-09-12 Nginx配置文件(nginx配置文件位置)
- 2024-09-12 基于nginx反向代理实现网站静态页面与动态页面自动切换
- 2024-09-12 nginx学习总结(nginx入门教程)
- 2024-09-12 除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
- 2024-09-12 Nginx网站服务(nginxweb服务器)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)