详解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 相关文章推荐
使用Apache的rewrite
Mar 09 Servers
Nginx优化服务之网页压缩的实现方法
Mar 31 Servers
nginx location优先级的深入讲解
Mar 31 Servers
nginx限制并发连接请求数的方法
Apr 01 Servers
教你快速开启Apache SkyWalking的自监控
Apr 25 Servers
Nginx配置文件详解以及优化建议指南
Sep 15 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
nginx配置限速限流基于内置模块
May 02 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
Windows server 2022创建创建林、域树、子域的步骤
Jun 25 Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 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创建Cookie数组的详解
2013/07/03 PHP
JQuery toggle使用分析
2009/11/16 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
python中字符串前面加r的作用
2015/06/04 Python
Python中str.format()详解
2017/03/12 Python
Python可变参数用法实例分析
2017/04/02 Python
Python中类的初始化特殊方法
2017/12/01 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
python绘制立方体的方法
2018/07/02 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
Python requests获取网页常用方法解析
2020/02/20 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
人事专员岗位说明书
2014/07/29 职场文书
网站出售协议书范文
2014/10/10 职场文书
母亲去世追悼词
2015/06/23 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
opencv 分类白天与夜景视频的方法
2021/06/05 Python
深入理解Pytorch微调torchvision模型
2021/11/11 Python