Nginx try_files指令工作异常

Nginx try_files指令工作异常,nginx,Nginx,花了几个小时试图找出问题所在,但无法解决 以下是我努力实现的目标: 当用户请求js文件时,我想检查共享内存中是否存在丑陋的副本,如果存在,就提供它。如果没有丑陋的副本,我想提供常规文件 以下是我所在位置的信息: location ~/require/[a-z0-9]+/(.*) { try_files /dev/shm/uglified/$1 /public/javascripts/$1; } 如您所见,如果用户要求文件/require/fe45be18b99f9099efbc98a71

花了几个小时试图找出问题所在,但无法解决

以下是我努力实现的目标:

当用户请求js文件时,我想检查共享内存中是否存在丑陋的副本,如果存在,就提供它。如果没有丑陋的副本,我想提供常规文件

以下是我所在位置的信息:

location ~/require/[a-z0-9]+/(.*) {
   try_files /dev/shm/uglified/$1 /public/javascripts/$1;
}
如您所见,如果用户要求文件
/require/fe45be18b99f9099efbc98a71f67924aef72d58a/app/require config.js

  • 我们应该检查文件
    /dev/shm/uglified/app/require config.js是否存在,如果存在,则提供服务

  • 如果未在1中提供文件,请从
    /public/javascripts/
    位置提供文件
    app/require config.js

  • 嗯,看起来很简单,但不起作用。 所有文件都存在-位于
    dev/shm
    public
    位置

    但是:

  • dev/shm
    文件夹发送的文件永远不会被送达,无论该位置在try\u files指令中是第一个还是第二个

  • 仅从
    public
    位置提供文件,并且如果文件位于try\u files指令的第二位

  • e、 g.
    try_files/dev/shm/uglified/$1/public/javascripts/$1工作

    try_files/public/javascripts/$1/dev/shm/uglified/$1不起作用,尽管我只是在指令中更改了位置的位置


    有谁能告诉我为什么/dev/shm中的文件从未被提取,为什么try\u files指令中的位置顺序很重要?

    感谢@Richard Smith的评论,我想出了如何使它工作的方法:

    #that's the basic location, where we just redirect request to /dev/shm/ location
    location ~/require/[a-z0-9]+/(.*) {
        echo_location /dev/shm/uglified/$1;
    }
    
    #that's location to serve files from shared memory
    location ~ ^/dev/shm/uglified/(.*) {
    
        #set the root
        root /dev/shm/uglified/;
    
        #try file in this file, if it does not exist, redirect to public location
        try_files /$1 /public/javascripts/$1;
    
    }
    

    try\u文件
    要求URI作为参数,而不是路径名。路径名是从文档根(由
    root
    指令指定)构造的。也许您可以将共享内存映射或符号链接到文档根目录中。谢谢!,您的评论对找到解决方案很有帮助