详解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 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
Nginx进程调度问题详解
Sep 25 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
NGINX 权限控制文件预览和下载的实现原理
Jan 18 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
Nginx配置根据url参数重定向
Apr 11 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
django项目、vue项目部署云服务器的详细过程
Jul 23 Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
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
用户的详细注册和判断
2006/10/09 PHP
PHP URL路由类实例
2013/11/12 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP _construct()函数讲解
2019/02/03 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python列表返回重复数据的下标
2020/02/10 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
后勤副校长自我鉴定
2013/10/13 职场文书
劳资专员岗位职责
2013/12/27 职场文书
店面销售职位的职责
2014/03/09 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
毕业生党员个人总结
2015/02/14 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书