Nginx中try_files指令的实现示例

 更新时间:2024年10月25日 10:08:32   作者:我叫白小猿  
try_files是Nginx配置中的一个指令,用于检查文件是否存在,并根据存在情况处理请求,本文就来介绍一下Nginx中try_files指令的实现示例,感兴趣的可以了解一下

1. 简介

try_files是Nginx中一个非常强大且常用的指令,其用于按顺序检查文件是否存在,并将请求传递给第一个找到的文件,或者在所有文件都未找到时,执行一个回退URI。该指令在配置静态网站或单页面应用(SPA)时特别有用,因为其可以确保Nginx优先服务静态文件,而只有在静态文件不存在时才将请求转发给后端应用或提供回退页面。

2. 基本语法

try_files file ... uri;
  • file ... : 一个或多个要检查的文件路径。Nginx会按照提供的顺序检查这些文件是否存在;
  • uri:若所有指定的文件都不存在,则执行回退URI,该URI可以是一个静态页面(如404页面),也可以是一个请求处理程序(如一个处理所有前端路由的PHP脚本或Node.js应用的入口点);

try_files使用示例:

try_files  $uri $uri/ /TEST/index.html;

这里的 $uri 是客户端请求的原始 URI。

让我们逐步解释这条指令:

1)$uri: Nginx 会首先尝试直接从请求的 URI 中查找文件。例如,如果用户请求 /about, Nginx 会尝试查找 /about 文件。
2)$uri/: 如果第一步没有找到文件,Nginx 会尝试将请求的 URI 视为目录,并在后面添加斜杠 /。例如,如果用户请求 /about, Nginx 会尝试查找 /about/ 目录。
3)/TEST/index.html: 如果前两步都没有成功找到文件或目录,Nginx 会尝试返回 /TEST/index.html 文件。

则:

  • 如果用户请求的是一个存在的文件(如 /about),Nginx 将直接返回该文件。
  • 如果用户请求的是一个目录(如 /about/),Nginx 将尝试返回该目录下的默认文件。
  • 如果上述两种情况都没有发生,Nginx 最终会尝试返回 /TEST/index.html。
  • 这样的配置非常适合单页应用(SPA)或那些希望为所有未找到的路由提供一个默认页面的应用程序。例如,如果你有一个前端应用托管在 /TEST/ 下,并且所有的页面都在 /TEST/index.html 中呈现,那么这个配置就能确保无论用户请求什么路径,都能看到应用的首页。

3. 案例

3.1 静态网站

假设有一个静态网站,其HTML、CSS和JS文件都存放在/data/www目录下,并希望Nginx首先尝试直接服务这些静态文件,若文件不存在,则返回404错误。

server {  
    listen       80;  
    server_name  example.com;  
  
    root   /data/www;  
  
    location / {  
        try_files $uri $uri/ =404;  
    }  
}

在该例子中,$uri表示请求的URI(不包括主机名和端口),若$uri指向的文件或目录存在,Nginx将直接服务它,若$uri指向的文件不存在但目录存在,Nginx会尝试在末尾添加斜杠并重试请求,若仍未找到文件,则Nginx将返回404错误。

3.2 单页面应用

对于单页面应用,希望无论请求什么URL,都返回同一个HTML文件(通常是index.html),然后让前端路由处理这些URL,这可以通过将try_files指令的回退设置为该HTML文件来实现。

server {  
    listen       80;  
    server_name  myapp.com;  
  
    root   /usr/share/nginx/html;  
  
    location / {  
        try_files $uri $uri/ /index.html;  
    }  
}

该配置中,Nginx首先尝试服务请求的文件或目录,若找不到,则会回退到/index.html,这允许前端路由接管并显示正确的页面,这种方法特别适用于React、Vue或Angular等现代前端框架构建的单页面应用。

到此这篇关于Nginx中try_files指令的实现示例的文章就介绍到这了,更多相关Nginx try_files指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 给小白的 Nginx 30分钟入门指南(小结)

    给小白的 Nginx 30分钟入门指南(小结)

    这篇文章主要介绍了给小白的 Nginx 30分钟入门指南(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • nginx代理实现静态资源访问的示例代码

    nginx代理实现静态资源访问的示例代码

    本文主要介绍了nginx代理实现静态资源访问的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Nginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Nginx 解决WebApi跨域二次请求以及Vue单页面的问题

    Nginx 解决WebApi跨域二次请求以及Vue单页面的问题

    下面小编就为大家分享一篇Nginx 解决WebApi跨域二次请求以及Vue单页面的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 本地HTTPS环境搭建的完整步骤记录

    本地HTTPS环境搭建的完整步骤记录

    这篇文章主要给大家介绍了关于本地HTTPS环境搭建的相关资料,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面随着小编来一起学习学习吧
    2018-05-05
  • 详解使用ChatGPT解决Nginx反向代理的问题

    详解使用ChatGPT解决Nginx反向代理的问题

    这篇文章主要为大家介绍了使用ChatGPT解决Nginx反向代理的问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • upstream模块在nginx配置文件中的作用详解

    upstream模块在nginx配置文件中的作用详解

    这篇文章主要为大家介绍了upstream模块在nginx配置文件中的作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Nginx搭建https服务器教程

    Nginx搭建https服务器教程

    这篇文章主要为大家详细介绍了Nginx搭建https服务器教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Nginx中map指令的具体使用

    Nginx中map指令的具体使用

    Nginx的map指令是一个强大的工具,用于根据变量的值来设置另一个变量的值,本文就来介绍一下Nginx中map指令的具体使用,感兴趣的可以了解一下
    2024-07-07
  • nginx访问控制的实现示例

    nginx访问控制的实现示例

    这篇文章主要介绍了nginx访问控制的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论