详解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快速入门教程
Mar 31 Servers
Nginx URL重写rewrite机制原理及使用实例
Apr 01 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
Nginx缓存设置案例详解
Sep 15 Servers
在Docker容器中部署SQL Server
Apr 11 Servers
Nginx反向代理、重定向
Apr 13 Servers
Windows Server 2012配置DNS服务器的方法
Apr 29 Servers
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
Apr 29 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 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的Socket通信之UDP通信实例
2015/07/02 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
豆瓣网的jquery代码实例
2008/06/15 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
python list的index()和find()的实现
2020/11/16 Python
AJAX的全称是什么
2012/11/06 面试题
十岁生日家长答谢词
2014/01/17 职场文书
运动会通讯稿200字
2014/02/16 职场文书
辅导员评语
2014/05/04 职场文书
2014年节能工作总结
2014/12/18 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
参加招聘会后的感想
2015/08/10 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电