详解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基于域名,端口,不同IP的虚拟主机设置的实现
Mar 31 Servers
Mac环境Nginx配置和访问本地静态资源的实现
Mar 31 Servers
nginx请求限制配置方法
Jul 09 Servers
Nginx location 和 proxy_pass路径配置问题小结
Sep 04 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
CentOS7和8下安装Maven3.8.4
Apr 07 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
Linux下使用C语言代码搭建一个简单的HTTP服务器
Apr 13 Servers
nginx 配置缓存
May 11 Servers
Nginx 匹配方式
May 15 Servers
Nginx如何配置多个服务域名解析共用80端口详解
Sep 23 Servers
ubuntu端向日葵键盘输入卡顿问题及解决
Dec 24 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
Terran建筑一览
2020/03/14 星际争霸
PHP中动态显示签名和ip原理
2007/03/28 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
PHP fclose函数用法总结
2019/02/15 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Angular2库初探
2017/03/01 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
python算法学习之计数排序实例
2013/12/18 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
详解python statistics模块及函数用法
2019/10/27 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python序列类型种类详解
2020/02/26 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
求职自我推荐信
2014/06/25 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
python Polars库的使用简介
2021/04/21 Python
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
pandas数值排序的实现实例
2021/07/25 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python