Nginx企业级负载均衡:技术详解系列(16)—— Nginx的try_files指令,你知道这个指令是干什么的吗?

在这里插入图片描述

你好,我是赵兴晨,97年文科程序员。

今天咱们来聊一聊Nginx的try_files指令,你知道这个指令是干什么的吗?

如果你对Web服务器配置有所了解,那么你可能会对try_files指令感到好奇。这个指令实际上是Nginx配置中的一项强大功能,它能够按顺序检测文件或目录是否存在。当文件或目录不存在时,Nginx会执行内部重定向到一个指定的回退URI。

检测文件是否存在

在Nginx的配置文件中,try_files指令允许我们定义一个文件列表,Nginx会按照这个列表的顺序去查找文件。例如,它可能首先查找原始的URI,然后是该RUI的.html版本,接着是URI对应的目录下的index.html文件。如果所有这些尝试都失败了,Nginx将重定向到我们的回退URI。

重要的是要注意,只有列表中的最后一个参数能够触发内部重定向,而其他参数仅用于设置内部URI的指向。此外,最后一个参数指定的回退URI必须存在,否则Nginx将返回一个内部500的错误。

通过这种方式,try_files指令不仅提高了Web服务器的领会行,还增强了用户体验,因为它允许我们优雅地处理不存在的文件请求。

语法格式:
try_files指令的基本语法如下:

try_files file ... uri;
try_files file ... =code;
  • file:需要检查的文件或目录路径。
  • uri:如果所有文件都不存在,将重定向到这个RUI。
  • code:如果指定文件不存在,返回自定义的状态码。

应用场景示例:
假设我们希望当用户访问不存在的页面时,自动跳转到 default.html 页面。我们可以这样配置:

location / {
  root /data/nginx/html/pc;
  index index.html;
  try_files $uri $uri.html $uri/index.html /about/default.html;
}

在上面👆例子中,如果用户请求的URI对应的文件不存在,Nginx将尝试查找$uri.html 或 $uri/index.html。如果这些文件也不存在,Nginx将重定向到 /about/default/html。

自定义状态码:
我们还可以通过设置 try_files的最后一个参数为等于某个状态码,来自定义返回的状态码。例如:

try_files $uri $uri/index.html $uri.html =489;

这样配置后,当用户访问不存在的URI时,Nginx将返回状态码489。

测试与验证
为了验证配置是否生效,我们可以执行以下操作:
1、向 /data/nginx/html/pc/about/default.html 文件中添加一些内容。

mkdir -p /data/nginx/html/pc/about
echo "this is default! " > /data/nginx/html/pc/about/default.html

2、重启Nginx服务。

systemctl restart nginx

3、访问一个不存在的URI,如 http://chensir.ink/about/xx.html,观察是否显示 default.html 的内容。
在这里插入图片描述

在这里插入图片描述

补充知识点:
使用 curl 命令时,可用过 -I 选项来发送HRAD请求,这样 curl 会只读文档的头部信息,而不是整个文档。这样可以帮助您查看返回的HTTP状态码。

4、注释掉 default.html的重定向,启用自定义状态码489的配置,再次访问不存在的URI,观察返回的状态码是否为489。

server {
  listen 80;
  location / {
    root /data/nginx/html/pc;
    index index.html;
    try_files $uri $uri.html $uri/index.html $uri.html =489;
    }
}

在这里插入图片描述

状态码是489,跟咱们预想的一样。

通过这些步骤,我们可以确保Nginx的try_files指令按照预期工作,为用户提供更加友好和灵活的访问体验。

OK,今天的分享就到这啦,感谢您的阅读。我们下期再见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十四)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 今天,我们来介…

19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉巡线小车

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 19.4-STM32接收数据-状态显示在屏幕 先通过串口上位机模拟发送、 STM32有视觉循迹模式、…

SwiftUI知识点(一)

前言: Swift知识点,大至看完了,公司项目是Swift语言写的,后续苹果新出的SwiftUI,也需要学习一下 不知觉间,SwiftUI是19年出的,现在24年,5年前的东西了 学习的几个原因: …

探索DIYGW可视化开发工具:提升UniApp项目效率与质量的新途径

一、引言 在快速迭代和不断创新的移动应用开发领域中,开发者们常常面临着一个共同的挑战:如何在保证开发质量的同时,缩短开发周期。近期,一款名为DIYGW的可视化开发工具进入了我们的视野,它以其独特的拖拽式开发方式和…

Linux共享内存创建和删除

最近项目中使用到了共享内存记录下 创建共享内存: 删除共享内存: 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <u…

计算机科技的飞跃:从机械到量子的革命之旅

计算机科技的历史长河中&#xff0c;涌现出了许多划时代的事件和发明&#xff0c;它们不仅标志着技术的飞跃&#xff0c;也深刻地改变了人类生活的方方面面。 ENIAC的诞生 在第二次世界大战的硝烟中&#xff0c;美国军方迫切需要一种能够迅速解决复杂计算问题的工具&#xff0…

深入理解文件系统和日志分析

文件是存储在硬盘上的&#xff0c;硬盘上的最小存储单位是扇区&#xff0c;每个扇区的大小是512字节。 inode&#xff1a;存储元信息&#xff08;包括文件的属性&#xff0c;权限&#xff0c;创建者&#xff0c;创建日期等等&#xff09; block&#xff1a;块&#xff0c;连续…

SpringMVC:转发和重定向

1. 请求转发和重定向简介 参考该链接第9点 2. forward 返回下一个资源路径&#xff0c;请求转发固定格式&#xff1a;return "forward:资源路径"如 return "forward:/b" 此时为一次请求返回逻辑视图名称 返回逻辑视图不指定方式时都会默认使用请求转发in…

2024年06月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2024年06月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

模板-初阶

引言&#xff1a; 在C&#xff0c;我们已经学过了函数重载&#xff0c;这使得同名函数具有多个功能。但是还有一种更省力的方法&#xff1a;采用模板。 本文主要介绍以下内容 1. 泛型编程 2. 函数模板 3. 类模板 1.泛型编程 在将这一部分之前&#xff0c;通过一个故事引…

语言模型的校准技术:增强概率评估

​ 使用 DALLE-3 模型生成的图像 目录 一、说明 二、为什么校准对 LLM 模型至关重要 三、校准 LLM 概率的挑战 四、LLM 的高级校准方法 4.1 语言置信度 4.2 增强语言自信的先进技术 4.3 基于自一致性的置信度 4.4 基于 Logit 的方法 五、代理模型或微调方法 5.1 使用代…

Python 网络爬虫:深入解析 Scrapy

大家好&#xff0c;在当今数字化时代&#xff0c;获取和分析网络数据是许多项目的关键步骤。从市场竞争情报到学术研究&#xff0c;网络数据的重要性越来越被人们所认识和重视。然而&#xff0c;手动获取和处理大量的网络数据是一项繁琐且耗时的任务。幸运的是&#xff0c;Pyth…

Winform ListView 嵌入组合框、布尔、图片等复杂控件

一、Winform ListView 显示复杂控件示例 以下展示了两种实现思路方案。最后修改日期 2024-05 surfsky 1.1 方案一&#xff1a;ListView 结合组合框进行模拟编辑 基本思路 在界面上放置一个lisview和一个combobox&#xff0c;combobox平时是隐藏的。点击listview&#xff0c…

机械设计手册第一册:公差

形位公差的标注&#xff1a; 形位公差框格中&#xff0c;不仅要表达形位公差的特征项目、基准代号和其他符号&#xff0c;还要正确给出公差带的大小、形状等内容。 1.形位公差框格&#xff1a; 形位公差框格由两个框格或多个格框组成&#xff0c;框格中的主要内容从左到右按…

mysql中基于规则的优化

大家好。我们在平时开发的过程中可能会写一些执行起来十分耗费性能的语句。当MySQL遇到这种sql时会依据一些规则&#xff0c;竭尽全力的把这个很糟糕的语句转换成某种可以比较高效执行的形式&#xff0c;这个过程被称作查询重写&#xff0c;今天我们就来聊一下mysql在查询重写时…

FreeRTOS基础(八):FreeRTOS 时间管理

前面我们用了FreeRTOS中的延时函数&#xff0c;本篇博客就来探讨FreeRTOS中的延时函数&#xff0c;看看他们是如何发挥作用的。当我们在裸机开发中调用delay_ms()函数时&#xff0c;我们的处理器将不处理任何事&#xff0c;造成处理器资源的浪费。 为此&#xff0c;为了提高CPU…

ChatTTS改良版 - 高度逼真的人类情感文本生成语音工具(TTS)本地一键整合包下

先介绍下ChatTTS 和之前发布的 Fish Speech 类似&#xff0c;都是免费开源的文本生成语音的AI软件&#xff0c;但不同的是&#xff0c;ChatTTS测试下来&#xff0c;对于人类情感语调的模仿&#xff0c;应该是目前开源项目做的最好的&#xff0c;是一款高度接近人类情感、音色、…

计算机工作原理(程序猿必备的计算机常识)

目录 一、计算机工作原理1.冯诺依曼体系2. CPU执行指令的过程 二、操作系统三、进程的概念四、进程的管理五、进程的调度 一、计算机工作原理 1.冯诺依曼体系 现在的计算机大多都遵循冯诺依曼体系结构 CPU&#xff1a; 中央处理器&#xff0c;进行算术运算和逻辑判断&#…

百度文心一言API批量多线程写文章软件-key免费无限写

百度文心大模型的两款主力模型ENIRE Speed、ENIRE Lite全面免费&#xff0c;即刻生效。 百度文心大模型的两款主力模型 这意味着&#xff0c;大模型已进入免费时代&#xff01; 据了解&#xff0c;这两款大模型发布于今年 3 月&#xff0c;支持 8K 和 128k 上下文长度。 ER…

赢销侠的秘密武器:如何提升客户满意度?

在竞争激烈的商业战场上&#xff0c;客户满意度是企业能否长盛不衰的关键。它如同一面镜子&#xff0c;映照出企业的服务质量和产品实力。那么&#xff0c;赢销侠们是如何运用秘密武器来提升客户满意度的呢&#xff1f;本文将深入探讨这一课题&#xff0c;并揭示背后的策略与智…