详解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简单配置多个server的方法
Mar 31 Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
使用 Apache 反向代理的设置技巧
Jan 18 Servers
Nginx中使用Lua脚本与图片的缩略图处理的实现
Mar 18 Servers
tomcat正常启动但网页却无法访问的几种解决方法
May 06 Servers
讨论nginx location 顺序问题
May 30 Servers
git中cherry-pick命令的使用教程
Jun 25 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
Nginx如何获取自定义请求header头和URL参数详解
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
关于尾递归的使用详解
2013/05/02 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python反射用法实例简析
2017/12/22 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
使用tensorflow实现线性回归
2018/09/08 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
python write无法写入文件的解决方法
2019/01/23 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Pytorch中.new()的作用详解
2020/02/18 Python
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
大整数数相乘的问题
2012/07/22 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
先进班组事迹材料
2014/12/25 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
毕业生政审意见范文
2015/06/04 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技