我想知道是否可以让 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
...
Run Code Online (Sandbox Code Playgroud)
我想将对“file.txt”的请求重写为该文件的最新版本。这就是我想做的事情:
root /var/files;
rewrite file.txt $(ls -v /var/files | tail -1);
Run Code Online (Sandbox Code Playgroud)
或者302也不错!
location file.txt {
return 302 $(ls -v /var/files | tail -1);
}
Run Code Online (Sandbox Code Playgroud)
另请注意,符号链接不是一个选项:( 我希望由 nginx 或 nginx 的某些扩展来处理此问题。
我对这个问题的解决方案最终被证明是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"
Run Code Online (Sandbox Code Playgroud)
启动 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;
}
Run Code Online (Sandbox Code Playgroud)
使用此策略,您可以使用位置块捕获任何类型的请求,并让 shell 脚本确定该 URI 的输出应该是什么。
nginx/fcgiwrap 的更多信息/示例可以在NGINX 文档中找到。
归档时间: |
|
查看次数: |
617 次 |
最近记录: |