Nginx系列-5 root和alias和index和try_files

1.root和alias

root和alias用于指定文件系统的路径。root一般定义在server块中,为每个server指定文件系统路径;alias只能定义在location块中,为具体的url指定文件系统。二者的差别还体现在:
[1] root只能指定目录,而alias可以指定目录也可以指定文件;
[2] root和alias的路径拼接方式不同。
本章节在介绍root和alias的使用过程中,会围绕差异点进行细致描述。如果对这两点比较熟悉,请直接跳过本章内容。

1.1 root用法

说明: root指令可以基于相对路径或者绝对路径;当使用相对路径是,相对于即Nginx的安装路径(prefix);建议使用绝对路径

server {listen  8001;server_name  localhost;#等价于 root /home/sy/;root /home/sy;location /static {}
}

当访问http://localhost:8001/static/abc地址时,nginx会按照/home/sy/static/abc路径寻找文件或目录。
拼接方式
http://{域名}:{端口} 段替换为root指定的目录。
寻找文件和目录的策略:
首先说明一下location块的如果没有手动设置Index指令,会使用默认值: index index.html;, 即上述的location块实际为:

location /static {index index.html;
}

[1] 当请求url为http://localhost:8001/static时, Nginx认为static为文件:
case1: 判断/home/sy/static文件是否存在,存在-直接放回;
case2: 判断/home/sy/static/文件夹是否存在,存在-返回301重定向到http://localhost:8001/static/路径;
case3: static文件或者static文件夹否不存在时,返回404.

[2] 当请求url为http://localhost:8001/static/时, Nginx认为static为文件夹:
case1: 判断/home/sy/static/文件夹是否存在, 不存在-返回404;
case2: 判断/home/sy/static/文件夹下index.html文件是否存在,不存在-返回403;
case3: /home/sy/static//文件夹下index.html文件文件存在,则直接将index.html文件返回.

1.2 alias用法

server {listen  8001;server_name  localhost;location /static {#不同于 alias /home/sy;alias /home/sy/;}
}

当访问http://localhost:8001/static/abc地址时,nginx会按照/home/sy/abc路径寻找文件或目录。
说明:alias /home/sy/指令,指定当前文件系统路径为/home/sy/目录,而alias /home/sy;中sy可以是文件也可以是文件夹;方便维护起见,一般以/结尾。

拼接方式
将请求url去除http://{域名}:{端口}部分后,再去除location匹配的url部分,将剩余部分追加到alias声明的路径下。因此,location匹配url部分和alias定义时,是否以/结尾对url拼接有重要影响。如下几个案例:

案例1: alias /home/sy/文件夹

location /static {alias /home/sy/;
}
#访问http://localhost:8001/static/abc 
#拼接得到:/home/sy/abclocation /static/ {alias /home/sy/;
}
#访问http://localhost:8001/static/abc
#拼接得到:/home/sy/abc

案例2:alias /home/sy/文件

location /static {alias /home/sy;
}
#访问http://localhost:8001/static/abc 
#拼接得到:/home/sy/abclocation /static/ {alias /home/sy;
}
#访问http://localhost:8001/static/abc
#拼接得到:/home/syabc

注意:如果使用alias指令时不以/结尾,此处会访问/home/syabc,可能引入隐患。

寻找文件和目录的策略:
如果客户端请求以/结尾,表明请求的是目录,否则表明请求的是文件。文件不存在、目录不存在、目录下的index.html文件不存在、重定向以及相关错误码与root完全一致;这里不再进行赘述。

2.index

在root和alias章节中使用到了index指令,本章节对index指令的使用方式进行介绍。

说明:index可以定义在server块或者location块中

index指令用于定义访问目录是的默认文件,如下所示:

server {listen  8001;server_name  localhost;root /home/seong/;location /static/ {index index.html index.htm;}
}

当客户端请求路径为/static/,从而访问/home/seong/目录时,nginx按照定义顺序依次搜索该目录下的index.html文件和index.htm文件;返回第一个存在的文件,否则返回404.
index指令还可用于定义默认首页:

server {listen  8001;server_name  localhost;root /home/seong/;index index.html;
}

此时http://localhost:8001或者http://localhost:8001/时,将返回/home/seong/index.html文件。

3.try_files

try_files指令主要定义location块中(也可定义在server块),用于控制文件查找和请求重定向的逻辑 。
存在两种语法格式:
[1] 格式1: try_files file1 file2 … uri;
uri可以是本地文件系统的路径,或者是在当前 server 或 location 上下文中定义的一个 URI,如下所示:

location / {  root /home/seong;  try_files $uri $uri/ /index.html;  
}  

当$uri和$uri/指代的文件都不存在时, Nginx 会尝试在内部重写请求到/index.html.
uri也可以是以@开头命名的location,如下所示:

location / {  root /home/seong; try_files $uri $uri/ @redirect_to_baidu;  
}  location @redirect_to_baidu {return 301 http://www.baidu.com;  
}

[2] 格式2: try_files file1 file2 … =code;

server {  listen 80;  server_name example.com;  location / {  root /var/www/html;  try_files $uri $uri/ =400;  }  
}

当$uri和$uri/指代的文件都不存在时,返回400错误码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能与语音识别:技术进步与应用前景

引言 人工智能(AI)作为当今科技进步的核心驱动力,正在各个领域展现其变革力量。其中,语音识别技术作为人工智能的重要应用之一,已经深入到我们的日常生活和工作中。从智能助手如Siri、Google Assistant,到智…

kubernetes k8s Deployment 控制器配置管理 k8s 红蓝部署 金丝雀发布

目录 1、Deployment控制器:概念、原理解读 1.1 Deployment概述 1.2 Deployment工作原理:如何管理rs和Pod? 2、Deployment资源清单文件编写技巧 3、Deployment使用案例:创建一个web站点 4、Deployment管理pod:扩…

排序规则utf8_general_ci的作用是什么?

排序规则 utf8_general_ci 是指针对使用 UTF-8 编码存储的数据进行排序和比较的一种规则。在数据库管理系统(如MySQL)中,排序规则决定了在执行查询时如何比较和排序文本数据。 具体来说,utf8_general_ci 中的几个部分含义如下&am…

科研绘图系列:R语言雨云图(Raincloud plot)

介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…

模型剪枝入门

一、定义 1.定义 2. 案例1 3. 全局剪枝案例 4. 全局剪枝案例 5. 自定义剪枝 6. 特定网络剪枝 7. 多参数模块剪枝 8. torch.nn.utils.prune 解读 二、实现 定义 接口: import torch.nn.utils.prune as prune案例1 import torch.nn as nn import torch.nn.utils.…

createElement方法,

在JavaScript中, createElement 方法,这是JavaScript中DOM操作的一部分,用于创建一个新的HTML元素。 以下是 document.createElement 方法的基本用法: 创建新元素 let newElement document.createElement(div); // 创建一个…

全部由1组成的子矩形的数量

题目描述: 给定一个二维数组matrix,其中的值不是0就是1,返回全部由1组成的子矩阵的数量。 way: 假设我们遍历矩形的每一行,以当前遍历到的行作为地基,去看这一行的直方图(直方图介绍 ->直方…

10.3.3 QGIS点类型注释(Annotation)的应用与二次开发实现

文章目录 前言注释(Annotation)图层QGis中的注释(Annotation)图层二次开发实现线段类型注释(Annotation)点类型Item 总结 前言 介绍注释(Annotation)图层在QGis中的使用以及二次开发的实现说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 注释(Annotation)…

【Unity实战100例】Unity声音可视化多种显示效果

目录 一、技术背景 二、界面搭建 三、 实现 UIAudioVisualizer 基类 四、实现 AudioSampler 类 五、实现 IAudioSample 接口 六、实现MusicAudioVisualizer 七、实现 MicrophoneAudioManager 类 八、实现 MicrophoneAudioVisualizer 类 九、源码下载 Unity声音可视化四…

firefly rk3288 解决刷入Linux固件后mac地址一样的问题

原理:使用cpuid生成mac地址 1、修改u-boot/net/eth_common.c里的eth_env_set_enetaddr函数为: int eth_env_set_enetaddr(const char *name, const uchar *enetaddr) {char buf[ARP_HLEN_ASCII 1];sprintf(buf, "%pM", enetaddr);return en…

代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营 Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串 目录 代码随想录算法训练营前言LeetCode151.翻转字符串里的单词卡码网:55.右旋转字符串 一、LeetCode151.翻转字符串里的单词1.题目链…

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用,同时很容易被开发者遗忘,那么就非常适用于今天要提到的这个功能,Eloquent\Model的全局作用域。 首先看一个示例,有个数据表,结构如下&#xff1…

运行sudo apt install net-tools时显示无法定位软件包

当你在 Ubuntu 或基于 Debian 的系统上运行 sudo apt install net-tools 并收到“无法定位软件包”的错误时,这通常意味着你的系统可能没有正确配置软件源,或者软件源中没有提供 net-tools 包。以下是一些可能的解决方案: 1. 更新软件源列表…

java设计模式:03-结构型模式-概览

结构型模式(Structural Patterns) 结构型模式(Structural Patterns)主要关注类和对象的组合方式,旨在通过不同的结构组合方式来建立新的功能。结构型模式可以帮助开发者确保即使对象组合方式改变,也能保持…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题,主题简约大方,为v1.8版本, 该主题模板中包含了上千个应用,登录后台以后只需要简单的三个步骤就可以轻松发布apk文章, 我们只需要在WordPress后台中导入该主题就可以…

大模型应用如何点燃?

▎****尽管在中国,关于大模型的商业模式的讨论尚显早期,但智能体,尤其是专业智能体,蕴藏着巨大的潜力。 ChatGPT 还没有颠覆世界。 身处“第三次信息革命”,很多人被浓烈的FOMO(Fear of Missing Out&…

昇思25天学习打卡营第12天 | ResNet50图像分类

ResNet50在CIFAR-10数据集上的图像分类实践 在深入学习和实践使用ResNet50进行CIFAR-10数据集上的图像分类后,我对深度学习模型的构建、训练和优化有了更深刻的理解。本次学习经历涵盖了从理论探索到实际应用的全过程,以下是我的主要收获和反思。 1. 理…

(南京观海微电子)——电感的电路原理及应用区别

电感 电感是导线内通过交流电流时,在导线的内部及其周围产生交变磁通,导线的磁通量与生产此磁通的电流之比。 当电感中通过直流电流时,其周围只呈现固定的磁力线,不随时间而变化;可是当在线圈中通过交流电流时&am…

Jump Point Search(JPS)算法与A*算法

A* A*算法本质上讲是结合了DFS和BFS,针对当前起点先做一次BFS,再针对搜索的八个点做一次DFS BFS--广度优先算法(Breadth First Search) DFS A* 算法思想 A*的核心思想就是先进行一次BFS搜索,然后从这次BFS中找到距离…

python Requests库7种主要方法及13个控制参数(实例实验)

文章目录 一、Requests库的7种主要方法二、kwargs:控制访问的13个参数 一、Requests库的7种主要方法 序号方法说明1requests.request():提交一个request请求,作为其他请求的基础2requests.get():获取HTML网页代码的方法3requests.head()&…