Nginx使用try_files遇到的问题及解决

 更新时间:2025年10月10日 09:49:02   作者:葡萄糖o_o  
这篇文章主要介绍了Nginx使用try_files遇到的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

背景

root /some/path;
location / {
	try_files $uri $uri/ /dist/index.html;
}

使用React之类的的库来开发前端页面的时候,因为是单页应用所以需要上面的Nginx配置,用来在找不到html文件的时候内部重定向到/dist/index.html文件。

服务器上的目录结构是/some/path/dist/assetes网站的静态资源都是存在/some/path/dist/下的,而服务器的根目录是/some/path/

域名:localhost.abc.com

现象:访问localhost.abc.com/dist/正常访问,访问localhost.abc.com/dist/xxx等都正常,而直接通过域名localhost.abc.com访问页面则出现403错误。

当访问域名会被location /块捕获,这是毋庸置疑的,匹配到之后,try_files 会尝试第一个参数 / (当前的$uri是 / )也就是/app/app/下只有一个文件夹dist,也没有index.html或者index.htm文件,所以找不到,应该是404,然后继续找 // (这个 // 会被如何解析不得而知)也找不到404,所以最后会知道 /some/path/dist/index.html 这个文件是存在的,所以不应该出现403错误,应该正常展示才对。

遇到上面的问题主要是因为Nginx的匹配流程不熟悉导致的,在访问文件夹的时候,如果没有找到index配置的文件,例如index.html之类的,那么会继续调用autoIndex模块,autoIndex模块的值默认是false,所以就报没有权限查看这个文件夹的异常,异常码是403。

try_files 是不会处理403这个异常的,try_files处理的是异常码404,所以403这个异常就被直接返回出去了,也就是说在第一步匹配 / 的时候就直接返回了。

解决

即使开启autoIndex对于单页应用来说也是十分奇怪的。所以我们可以设置root: /some/path/dist/这样,即使访问的是/那么第一个匹配的也是 /some/path/dist/index.html,就不会出现访问域名直接报错的尴尬情况。

但是这个问题其实没有解决,例如/some/path/dist/xxx/这个目录通过域名访问还是存在上面说的问题,/dist/xxx/这个访问还是会报403但是这也无法避免,这其实是我们配置导致的(如上所述)。

除了修改root值的解决方案,我们还可以捕获403这个错误,然后再重定向到我们的目标文件/some/path/dist/index.html。这就从根本解决了这个问题,但是我们网站也没有了403错误,这样解决是否合适,有待商榷。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nginx出现权限问题解决(13: Permission denied)

    nginx出现权限问题解决(13: Permission denied)

    本文主要介绍了nginx出现权限问题解决(13: Permission denied),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • nginx 常用指令 try_files allow root alias的使用

    nginx 常用指令 try_files allow root ali

    本文主要介绍了nginx 常用指令 try_files allow root alias的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Nginx配置四层、七层网络代理转发的方法示例

    Nginx配置四层、七层网络代理转发的方法示例

    nginx作为透明代理可以充分利用其高性能和灵活性来实现网络流量的转发和处理,本文主要介绍了Nginx配置四层、七层网络代理转发的方法示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 国外著名论坛程序IPB(Invision Power Board)在nginx下的配置示例

    国外著名论坛程序IPB(Invision Power Board)在nginx下的配置示例

    这篇文章主要介绍了国外著名论坛程序IPB(Invision Power Board)在nginx下的配置示例,使用fastcgi配置模式,需要的朋友可以参考下
    2014-07-07
  • ngin配置301重定向设置方法和nginx子目录301重定向

    ngin配置301重定向设置方法和nginx子目录301重定向

    这篇文章主要介绍了ngin配置301重定向设置方法和nginx子目录301重定向,需要的朋友可以参考下
    2014-04-04
  • Nginx配置SSL证书部署HTTPS网站的方法(颁发证书)

    Nginx配置SSL证书部署HTTPS网站的方法(颁发证书)

    这篇文章主要介绍了Nginx配置SSL证书部署HTTPS网站的方法(颁发证书),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 如何使用k8s部署nginx服务

    如何使用k8s部署nginx服务

    Deployment是用来定义和管理 Pod 的高级控制器,它描述了应用程序的期望状态,例如需要运行的 Pod 数量、使用的镜像版本等信息,本文给大家介绍如何使用k8s部署nginx服务,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Nginx代理缓存静态资源的实现方法

    Nginx代理缓存静态资源的实现方法

    本文主要介绍了Nginx代理缓存静态资源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • Nginx代理缓冲proxy_buffering配置方式

    Nginx代理缓冲proxy_buffering配置方式

    这篇文章主要介绍了Nginx代理缓冲proxy_buffering配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Nginx实现会话保持的两种方式

    Nginx实现会话保持的两种方式

    在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,本文介绍了两种方法,感兴趣的可以了解一下
    2022-03-03

最新评论