Nginx try_files指令工作异常
花了几个小时试图找出问题所在,但无法解决 以下是我努力实现的目标: 当用户请求js文件时,我想检查共享内存中是否存在丑陋的副本,如果存在,就提供它。如果没有丑陋的副本,我想提供常规文件 以下是我所在位置的信息:Nginx try_files指令工作异常,nginx,Nginx,花了几个小时试图找出问题所在,但无法解决 以下是我努力实现的目标: 当用户请求js文件时,我想检查共享内存中是否存在丑陋的副本,如果存在,就提供它。如果没有丑陋的副本,我想提供常规文件 以下是我所在位置的信息: location ~/require/[a-z0-9]+/(.*) { try_files /dev/shm/uglified/$1 /public/javascripts/$1; } 如您所见,如果用户要求文件/require/fe45be18b99f9099efbc98a71
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是否存在,如果存在,则提供服务
/public/javascripts/
位置提供文件app/require config.js
dev/shm
和public
位置
但是:
dev/shm
文件夹发送的文件永远不会被送达,无论该位置在try\u files指令中是第一个还是第二个public
位置提供文件,并且如果文件位于try\u files指令的第二位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
指令指定)构造的。也许您可以将共享内存映射或符号链接到文档根目录中。谢谢!,您的评论对找到解决方案很有帮助