详解nginx location指令


Posted in Servers onJanuary 18, 2022

location 介绍 location是Nginx中的块级指令(block directive),,location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释和说明。 开始之前先明确一些约定,我们输入的网址叫做请求URI,nginx用请求URI与location中配置的URI做匹配。

Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //这个是服务器级别
      listen 80;
      server_name localhost;
        location / { //这个是请求级别
          root html;
          index index.html index.htm;
        }
      }
}

location区段

通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=|~|~*|^~|@] pattern{……}

1、没有修饰符 表示:必须以指定模式开始,如:

server {
  server_name baidu.com;
  location /abc {
    ……
  }
}
那么,如下是对的:http://baidu.com/abchttp://baidu.com/abc?p1http://baidu.com/abc/http://baidu.com/abcde

那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde

2、=表示:必须与指定的模式精确匹配

server {
server_name sish
  location = /abc {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1
如下是错的:
http://baidu.com/abc/
http://baidu.com/abcde

3、~ 表示:指定的正则表达式要区分大小写

server {
server_name baidu.com;
  location ~ ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu.com/abc?p1=11&p2=22
如下是错的:
http://baidu.com/ABC
http://baidu.com/abc/
http://baidu.com/abcde

4、~* 表示:指定的正则表达式不区分大小写

server {
server_name baidu.com;
location ~* ^/abc$ {
    ……
  }
}
那么,如下是对的:
http://baidu.com/abc
http://baidu..com/ABC
http://baidu..com/abc?p1=11&p2=22
如下是错的:
http://baidu..com/abc/
http://baidu..com/abcde

5、^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,
那么就停止搜索其他模式了。
6、@ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请
求来访问,如try_files或error_page等

查找顺序和优先级
1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配

Location区段匹配示例location = / {
  # 只匹配 / 的查询.
  [ configuration A ]
}
location / {
  # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
  [ configuration B ]
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
  [ configuration C ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处
  理。
  [ configuration D ]
} 各
请求的处理如下例:
■/ → configuration A
■/documents/document.html → configuration B
■/images/1.gif → configuration C
■/documents/1.jpg → configuration D

root 、alias指令区别

location /img/ {
    alias /var/www/image/;
}

#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件

location /img/ {
    root /var/www/image;
}

alias是一个目录别名的定义,root则是最上层目录的定义。

还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

到此这篇关于nginx location指令详解的文章就介绍到这了,更多相关nginx location指令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
阿里云Nginx配置https实现域名访问项目(图文教程)
Mar 31 Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
Mar 31 Servers
Nginx部署vue项目和配置代理的问题解析
Aug 04 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
Mac电脑OS系统下安装Nginx的详细教程
Apr 14 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
Windows Server 2008配置防火墙策略详解
Jun 28 Servers
Linux中各个目录的作用与内容
Jun 28 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
Aug 14 Servers
图文详解nginx日志切割的实现
Jan 18 #Servers
Nginx防盗链与服务优化配置的全过程
Jan 18 #Servers
使用 Apache 反向代理的设置技巧
NGINX 权限控制文件预览和下载的实现原理
Nginx虚拟主机的搭建的实现步骤
Jan 18 #Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 #Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 #Servers
You might like
ThinkPHP的Widget扩展实例
2014/06/19 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
python学生信息管理系统
2018/03/13 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python连接mongodb集群方法详解
2020/02/13 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
人事部主管岗位职责
2013/12/26 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
初三数学教学反思
2016/02/17 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
2022漫威和DC电影上映作品
2022/04/05 欧美动漫
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript