nginx(七十一)root、alias、index、try_files关系指令再探

news2024/11/17 17:53:21

一  root、alias、index、try_files辨析

说明: 这个系列很适合'前端人员'进阶学习

①  前言回顾

try_files基础知识  配置try_files实现内容重定向

root和alias指令辨析  

​强调: 

  1) index只能处理以'/'结尾的请求

  2) ​index指令'有点'在location中判断请求是否'是以/'结尾,才'起作用'

  也即:'if($uri ~ /$) {set $uri = "${uri}one_index_value"}',进行'internal重定向'

index和autoindex指令回顾

absolute_redirect  absolute_redirect port_in_redirect 响应Location形式

try_files的语法规则

nginx 301重定向踩坑记录   深度硬核文:nginx的301重定向处理过程分析

小知识: 如果'没有location'与uri匹配,则才是真正的'基于root指令'的'静态'资源查找

②  nginx从301403两次请求

++++++++++ "默认的老六行为" ++++++++++

index index.html;

root html;        --> 相对'--prefix的路径',默认是'/usr/share/nginx/html'

+++++++++ "案例讲解" +++++++++

这里: 'user kiosk;'

++++++++++ "从access_log的debug日志观察过程" ++++++++++

1) 由于'301'重定向,客户端发起了'两次'请求

思考: 为什么'nginx主动设置301 Moved Permanently'?

'原理'解读:

  1)当用户输入了一个url地址,nginx没有找到'alia、root、location、uri'作用后的资源

  2) 并且'nginx'发现最后的部分是一个'目录'

  3) 则本次访问的'响应'状态码会被设置成301,并在Response header里'增加一个Location'项

  4) 如果是'目录',基于'$uri',在返回的'Location'增加了一个'斜杠/'

absolute_redirect指令影响Location是绝对还是相对url 

根因: 指定的'index'文件,'没有'查找到,出现该'403'报错

③  index指令internal内部重定向探究

细节: '内部'重定向与'$uri'强相关

通俗: 对于'index指令',基于'$uri'进行'internal 内部重定向'

+++++++++++++ "官方案例太模糊,这里自己举例说明" +++++++++++++

思考: 为什么'没有'返回'88888888.html'文件的内容?

完全理解location中的index

补充: 千万'不要'使用 'location = /jane'精准形式,否则会导致'301重定向'的时候,'不能'匹配

重点:'rewrite指令' 发生'内部重定向',以及'proxy_pass'发生转发'发生'在查找'静态资源'之前

++++++++++++++  "分割线"  ++++++++++++++

问题: 什么条件下'index'指令符合我们的'预期'? 下面的案例补充"对比"说明

重点: internal '内部重定向'时,'$uri'为'/jane/8888888.html',此时跟'root'结合

④   index指令值其它细节

1) index指令值使用'变量'                 --> 可以根据'请求相关信息',自定义"首页"

2) index指令值以'/绝对路径'开头和'不以/'开头的区别  --> "重点探讨"

  备注: 指令值可以是'相对'路径也可以是'绝对'路径,绝对路径只能'放在最后'

  补充: 'alias'只能是'location'级别指令

+++++++++++ "案例讲解"  +++++++++++

上: 'nginx'配置

下: 'client'访问

+++++++++++ 分析: "301重定向次数过多探究(死循环)" +++++++++++

++++++++++ "第一次请求" ++++++++++

  1) 这里先根据'uri、location、alias'进行'资源'的查找

  2) 最终查找'/usr/share/nginx/html/index_demo/'

  3) 发现'index_demo,不是一个文件,'是一个'目录'

   备注: 通过对'/jane'加'/'表示请求'目录资源'

  4) 进行'301'重定向

 注意: '此次'重定向的'Location'为'/jane/',index指令并'没有'起作用

++++++++++ "第二次请求" ++++++++++

1) 由于'301'重定向,客户端'第二次'请求 -->$request_uri: '/jane/'

2) 匹配'location ~ /jane',此时查找'/usr/share/nginx/html/index_demo/'

   备注: 在'root|alias'判断资源类型 --> '文件|目录'

   细节: nginx'判断目录方式'是最终映射的'资源形式'是以'/'结尾,并'不一定'真是一个目录

3) index_demo是目录,后续准备'301 Moved Permanently',Location为'最终$uri+/'

4) 由于'请求'是以'/'结尾的,使用'index hello.html'

5) 发现'/usr/share/nginx/html/index_demo/hello.html'文件存在

   备注: 如果'文件不存在'则使用'另一个'index值令的值

6) 则继续'$uri'以'/jane/hello.html [拼接的]'进行'内部重定向'匹配 

  1) 'internal'内部重定向的$uri: /jane/hello.html 

  2) 重新匹配到'location ~ /jane'

  3) 进行'alias'作用,找资源'/usr/share/nginx/html/index_demo/hello.html',文件存在

  3) Location为: '$request_uri(不带参数)'与'index的指令值'拼接形式

  

++++++++++ "第三次请求" ++++++++++

++++++++++ "第n次请求" ++++++++++

每次'open index':'alias'结合'index'指令的值

++++++++ "一直内部重定向了50次" ++++++++

观察: "$uri"的变化

   

原理解读

++++++++++++  对比'实验'理解 ++++++++++++

细节点: 如果根据'root|alias'之后发现'文件资源存在',直接返回'200状态码',结束该次请求

  

'客户端'访问: curl -L -s http://index.wzj.com:8066/jane

alias只是'uri映射后'进行后的资源,可能是'文件'或'目录'

1) nginx判定如果是'文件',文件存在,则'直接返回'

2) 如果文件'不存在',则判定是否是'目录'资源,如果是返回'301'进行下一次客户端请求

2) nginx判定如果'不是目录',则判定资源不存在才使用'index'指令 --> "待验证"

③  location和alias的搭配问题

1) location使用'正则'与alias'结合'

条件:正则中必须'补获',alias中必须'引用',否则报错

alias和location不合理匹配导致目录穿越漏洞

1) 目录通过'..穿越'--> 'location + alias' --> location和alias一个'带/',一个'不带/'

2) 解决策略:  location和alias要么都带'/',要么都不带'/'

④   try_files再探

一个常见需求的nginx配置踩雷

1) 'try_files'可以和'root|alias'配合使用           --> '见官网'
​
2) 实现'伪静态'采用 'root+try_files[@形式]' 就够了

3) try_files使用户可以'自定义'映射'查找资源',而不是'nginx默认的先找文件,再找目录之类的'

4) 细节点: 如果配置了'$uri $uri/ @other',在'$uri/'的时候是'不会'进行'301'重定向了

index和try_files的区别  案例说明

+++++++++++++  "回归try_files的本质 --> 解决什么问题?"  +++++++++++++

本质: 是通过'rewrite'改变'$uri',然后进行'root、alias'重新匹配

 1) 通过改变'$uri'的方式,进行'资源'的重新寻址

 2) 如果轮到'index file','file'是以'/'结尾的,则'index'指令改变uri,进行'内部internal'

 3) 如果轮到'index uri',直接将'$uri'变为'index指令中的uri',进行'internal'重定向

最佳实践:try_files $uri $uri/ uri -> 如果nginx判断是'目录',不会返回'301 Location头'

if return rewrite 和try_files 都可以触发nginx 的rewrite

try_files指令高级说明

try_files 指令可以解决'vue或react框架'的history路由模式报'404或500'问题

⑤   遗留

1) 需求:

 [1] 请求:/a/b/c/d/e/f '返回' register.html 

 [2] 里面加载了几个相对路径的资源'wzj.png java.css' 

 [3] 目的: 想使用'alias'+'index'

vue的history和hash模式

⑥  $uri、try_files、index关系

⑦  internal 、index、try_files关系

 

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

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

相关文章

chatGPT账号apikey码-chatGPT 免费APIKEY

ChatGPT API Key免费吗 ChatGPT使用的API密钥可以免费获取,但是其使用可能会受到一些限制。具体而言,根据你所使用的API提供者和服务级别,免费的API密钥可能会受到以下限制: 次数限制:某些API可能会限制您的API调用次…

Centos 磁盘根目录扩容

Centos磁盘根目录扩容 1.扩容前检查 命令: df -Th or df -h 我们要扩张磁盘空间的就是挂载点为:/ (的这个) 2.添加sda磁盘空间查询磁盘 命令: fdisk -l 其实,我们可以将sda的磁盘新增空间分配给处于sda的 / 挂载目录 也可以跨磁盘将sdb(新磁盘…

约瑟夫环的三种解法(循环链表、数组和用数组模拟链表)

目录 前言 一、用循环链表实现 二、用数组实现 三、用数组模拟链表实现 前言 题目描述: 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后,只剩下一个人&am…

dockerfile传参问题和权限问题

dockerfile传参问题和权限问题 一、docker传参 在工作中,使用dockerfile构建镜像的时候,随着业务越来越多,流水线也越来越多,这时候就需要构建一些通用流水线,而通用流水线最大的问题,就是需要传递参数&a…

Linux基础命令和程序部署

Linux基础命令 ls 可以查看当前目录内容ls 后面跟上一个具体路径可以查看指定目录内容ls -l 可以以列表的形式查看,缩写llpwd 查看当前目录的绝对路径cd 切换目录(就是window界面的鼠标双击目录进入动作),cd在切换目录时后面可以…

【教学类-34-05】拼图(彩色图片+圆角凹凸拼图)3*4格子(中班主题《个别化拼图》偏美术)

图片展示: 背景需求: 最近班级孩子得了传染病,来了2位孩子。 我觉得:人少的话,孩子们就有充足的时间去拼那些带有凹凸槽的自制彩色图形拼图。 难点: 1、从直线剪切(方形拼图)转…

Flink Join操作

目录 DataStream API(函数编程) window Join join coGroup interval Join Table API(flink sql) Reguler Join (常规join) inner join left join / right join full join interval join lookup join Window Join INNER/LEFT/RIG…

摄像头录像软件哪款好用?这款就很不错

案例:录屏时怎么录电脑摄像头? 【很多时候我不仅仅需要录制电脑屏幕,还需要在录屏时录入人像,可是我的录屏软件不支持录制人脸。有没有好用的电脑录屏带人脸的屏幕录制工具介绍?】 无论是教学、游戏直播、软件开发、…

HTML + CSS + JS 利用邮编查询 API 实现邮编查询工具

引言 邮政编码是地址信息的重要组成部分,可以帮助快递公司、物流公司等对地址进行快速、准确的识别和派送。因此,邮编查询工具应用在许多业务场景中都有广泛的应用,例如:电商平台、物流公司、金融机构等。通过使用邮编查询 API&a…

fiddler在请求头添加指定信息

下图所示,设置完请求头信息后,点击右上角Actions按钮的Run Filterset now保存信息,即可。

centos7部署FastDFS服务

一、安装需要的相关依赖 yum -y install make cmake gcc gcc-c 因为我的服务器已经安装了gcc,所以略去 使用gcc -v查看版本 yum -y install zip unzip 安装性能事件通知库 yum -y install libevent 安装nginx依赖 yum -y install libevent yum -y install zli…

MITA触摸屏维修WP4053米塔工控机控制屏维修

MITA-TEKNIK米塔触摸屏维修工控机工控屏控制器维修DISPLAY 2COM全系列型号 Mita-Teknik触摸屏维修常见故障:上电无显示,运行报故障,无法与电脑通讯,触摸无反应,触控板破裂,触摸玻璃,上电黑屏&a…

自动化工具 接口自动化测试引擎

一、前言: 1、解决痛点:接口自动化测试用例需要人去开发、去维护。 2、实现第一性原理:根据定义的测试策略自动生成接口测试用例。 二、引擎优势: 1、提升人效:降低传统方式中接口测试开发与维护的工作量。 2、覆盖更…

输电线路在线监拍设备的国网协议对接方案

疫情过后,尤其山东淄博电力建设的发展,电网规模的不断研发,高压远距离架空输电线路日益增多,在复杂地形条件下的电网建设和设备维护工作也越来越多。 如何解决4G模块控制的功耗,和信号传输方面有一套完整的方案。基于合…

【网络安全】红队基础免杀

引言 本文主要介绍“反射型 dll 注入”及“柔性加载”技术。 反射型 dll 注入 为什么需要反射型 dll 注入 常规的 dll 注入代码如下: int main(int argc, char *argv[]) {HANDLE processHandle;PVOID remoteBuffer;wchar_t dllPath[] TEXT("C:\\experime…

从源码全面解析LinkedBlockingQueue的来龙去脉

一、引言 并发编程在互联网技术使用如此广泛,几乎所有的后端技术面试官都要在并发编程的使用和原理方面对小伙伴们进行 360 的刁难。 二、使用 对于阻塞队列,想必大家应该都不陌生,我们这里简单的介绍一下,对于 Java 里面的阻塞…

【 SpringBoot 统⼀功能处理 】

文章目录 引言一、⽤户登录权限效验Spring 拦截器拦截器实现原理扩展:统⼀访问前缀添加 二、统⼀异常处理三、统⼀数据返回格式四、ControllerAdvice 源码分析 引言 接下来是 Spring Boot 统⼀功能处理模块,是 AOP 的实战环节,要实现的课程⽬…

轨道交通信号系统的可靠性与安全性

01.引言 城市轨道交通系统作为大容量公共交通工具,其安全性直接关系到广大乘客的生命安全,所以要求城市轨道交通系统在如此高的运行密度下,还要保证安全和高效率的运行。而信号系统作为保证列车安全、正点、便捷、舒适、高密度不间断运行的重…

Filter 过滤器基本内容及案例改进

举个例子 假设在Web资源中,A资源要写5行代码,而B资源也要写一模一样的5行代码,这时就把这些代码都提取出来, 在过滤器里写这些代码,因为访问任何资源都要经过过滤器,在过滤器走一遍就可以,而不用…

性能优化之20个 Linux 服务器性能调优技巧

Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进…