nginx try_files指令判断文件是否存在实例

 更新时间:2015年02月13日 08:53:05   投稿:junjie  
这篇文章主要介绍了nginx try_files指令判断文件是否存在实例,本文用一个实际需求讲解try_files指令的使用,并给出配置示例,需要的朋友可以参考下

现在有这样一个需求,网站根目录下有静态文件,static目录下也有静态文件,static目录下的静态文件是程序批量生成的,我想让nginx在地址不变的前提下优先使用static目录里面的文件,如果不存在再使用根目录下的静态文件,比如访问首页http://example.com/index.html则nginx返回/static/index.html,如果不存在返回/index.html。

经过一番研究可以用if指令实现,关键配置如下,这条配置需要放到靠前的位置

复制代码 代码如下:

if (-e $document_root/static$request_uri) {
 rewrite ^/(.*)$ /static/$1 break;
 break;
}

这里有两点需要注意:

nginx变量默认应该开头有反斜线而结尾没有。

nginx字符串和变量可以直接连接,如果可能有歧义可以花括号括起变量名称,整个字符串必须加双引号

复制代码 代码如下:
"${document_root}/static${request_uri}"

是用这种方式有一个缺点,index指令指定的文件不会起作用,比如访问http://example.com/就会404,必须显示的指定文件名才行http://example.com/index.html。可以用rewrite修复,但是感觉不爽,在nginx陷阱页面突然发现一个针对性的指令try_files

复制代码 代码如下:

set $static "/static";
try_files $static$uri $static$uri/index.html /index.php;

参考页面

http://wiki.nginx.org/Pitfalls

后来发现$uri变量本身会自动添加index.html后缀,经过实验这样写也是可以的

复制代码 代码如下:

if (-e "${document_root}/static${uri}") {
 rewrite ^/(.*)$ /static/$uri break;
}

if (-e $request_filename) {
 break;
}


因为最后不存在的文件都写到index.php去了所以上面rewrite之后需要再判断一次文件存在。

相关文章

  • 详解nginx服务器绑定域名和设置根目录的方法

    详解nginx服务器绑定域名和设置根目录的方法

    这篇文章主要介绍了详解nginx服务器绑定域名和设置根目录的方法,nginx服务器绑定域名以及设置根目录非常方便,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Nginx ssi合并页面的具体实现

    Nginx ssi合并页面的具体实现

    nginx的ssi模块是一种类似于ASP的基于服务器的网页制作技术,本文主要介绍了Nginx ssi合并页面的具体实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 一文了解nginx HTTP安全响应问题

    一文了解nginx HTTP安全响应问题

    一些网站系统会经常遭到各类XSS攻击、点劫持等,从而造成重要信息的泄露以及服务器安全问题,本文就来介绍一下,感兴趣的可以了解一下
    2023-11-11
  • Nginx负载均衡(架构之路)详解

    Nginx负载均衡(架构之路)详解

    这篇文章主要为大家详细介绍了Nginx负载均衡的相关资料,如何配置三台服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Nginx丢弃http包体处理实例详解

    Nginx丢弃http包体处理实例详解

    这篇文章主要介绍了Nginx丢弃http包体处理实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • linux下安装Nginx1.16.0的教程详解

    linux下安装Nginx1.16.0的教程详解

    因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版。这篇文章主要介绍了linux下安装Nginx1.16.0 ,需要的朋友可以参考下
    2019-06-06
  • Nginx 实现会话保持的方式配置小结

    Nginx 实现会话保持的方式配置小结

    本文主要介绍了在NGINX中实现会话保持的几种常见方法,包括IP哈希、基于Cookie的会话保持、基于URL参数的会话保持及使用第三方的nginx-sticky-module模块,感兴趣的可以了解一下
    2024-11-11
  • 阿里云国际版使用Nginx作为HTTPS转发代理服务器的处理方法

    阿里云国际版使用Nginx作为HTTPS转发代理服务器的处理方法

    本文介绍了使用NGINX作为HTTPS流量转发代理的两种方法。它总结了NGINX使用HTTP CONNECT隧道和NGINX流充当HTTPS转发代理的解决方案的原则,环境构建要求,应用场景和关键问题
    2022-05-05
  • Nginx解决Http慢攻击(Slow HTTP Attack)的方法

    Nginx解决Http慢攻击(Slow HTTP Attack)的方法

    缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,本文给大家介绍了Nginx解决Http慢攻击(Slow HTTP Attack)的方法,需要的朋友可以参考下
    2024-02-02
  • Nginx下WordPress链接(url伪静态)301永久重定向实现方法

    Nginx下WordPress链接(url伪静态)301永久重定向实现方法

    在几个blog程序中折腾的结果,导致url连续二次变化。这是第三次了。 nginx 通过rewrite 使用 permanent; 参数 成301永久url重定向
    2012-09-09

最新评论