我可以使用 nginx 重定向到最新的文件吗?

我可以使用 nginx 重定向到最新的文件吗?

我想知道是否可以让 nginx 重写 URL 以指向文件的最新 (最后自然排序) 版本?基本上,我有一个充满文件修订版本的目录,如下所示:

/var/files/file-5.6.10.3.txt
/var/files/file-5.6.10.12.txt
/var/files/file-5.6.10.20.txt
/var/files/file-5.6.12.1.txt
...

我想将对“file.txt”的请求重写为该文件的最新版本。这就是我想要做的:

root /var/files;
rewrite file.txt $(ls -v /var/files | tail -1);

或者 302 也不错!

location file.txt {
    return 302 $(ls -v /var/files | tail -1);
}

还请注意,符号链接不是一个选项:(我希望由 nginx 或 nginx 的一些扩展来处理这个问题。

答案1

我最终解决这个问题的办法是使用 fcgiwrap。这对我来说很有意义,因为我想在 nginx 配置中使用 shell 命令。

首先,安装 fcgiwrap:

apt-get install fcgiwrap

编写一个 shell 脚本来执行您需要的任何类型的逻辑,并将其保存在 nginx 可以访问的地方:

#!/bin/bash

# Filename: /var/www/script

echo "HTTP/1.1 200 OK"
echo "Content-Length: $( echo "$REQUEST_URI" | wc -c )"
echo

echo "$REQUEST_URI"

启动fcgiwrap进程:

fcgiwrap -s unix:/run/myfunsocket

最后,配置 nginx 来处理请求:

location /subdir {
    fastcgi_param SCRIPT_FILENAME /var/www/script;
    fastcgi_param REQUEST_URI $uri;
    fastcgi_pass unix:/run/myfunsocket;
}

使用此策略,您可以捕获带有位置块的任何类型的请求,并让 shell 脚本确定该 URI 的输出应该是什么。

有关 nginx/fcgiwrap 的更多信息/示例,请参阅NGINX 文档

相关内容