详解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
Nginx安装完成没有生成sbin目录的解决方法
Mar 31 Servers
Nginx内网单机反向代理的实现
Nov 07 Servers
图文详解nginx日志切割的实现
Jan 18 Servers
Apache Linkis 中间件架构及快速安装步骤
Mar 16 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
阿里云 Windows server 2019 配置FTP
Apr 28 Servers
Tomcat配置访问日志和线程数
May 06 Servers
nginx之内存池的实现
Jun 28 Servers
win10搭建配置ftp服务器的方法
Aug 05 Servers
SpringBoot前端后端分离之Nginx服务器下载安装过程
Aug 14 Servers
Fluentd搭建日志收集服务
Sep 23 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
php ci框架验证码实例分析
2013/06/26 PHP
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
python读取注册表中值的方法
2013/04/08 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
Python中if有多个条件处理方法
2020/02/26 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
车辆维修工自我评价怎么写
2013/09/20 职场文书
聚美优品励志广告词
2014/03/14 职场文书
2015年电工工作总结
2015/04/10 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Python图片检索之以图搜图
2021/05/31 Python
教你使用TensorFlow2识别验证码
2021/06/11 Python
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
python基础之函数的定义和调用
2021/10/24 Python
vue+echarts实现多条折线图
2022/03/21 Vue.js
python解析照片拍摄时间进行图片整理
2022/07/23 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers