详解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代理如何解决前端跨域问题详析
Apr 02 Servers
zabbix自定义监控nginx状态实现过程
Nov 01 Servers
Nginx内网单机反向代理的实现
Nov 07 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
基于Apache Hudi在Google云构建数据湖平台的思路详解
Apr 07 Servers
docker-compose部署Yapi的方法
Apr 08 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
CentOS7环境下MySQL8常用命令小结
Jun 10 Servers
Linux下搭建SFTP服务器的命令详解
Jun 25 Servers
Nginx配置使用详解
Jul 07 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与SQL注入攻击[一]
2007/04/17 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
top.location.href 没有权限 解决方法
2008/08/05 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
vue综合组件间的通信详解
2017/11/06 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
Python Mysql自动备份脚本
2008/07/14 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python使用py2exe打包程序介绍
2014/11/20 Python
python实现xlsx文件分析详解
2018/01/02 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
互联网创业计划书的书写步骤
2014/01/28 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
继承公证书样本
2014/04/04 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
租赁协议书
2015/01/27 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
SQL中的三种去重方法小结
2021/11/01 SQL Server