nginx提供最新的下载

在我主持的网站上我有一个nginx设置为http服务器主要用于静态内容。 一些内容得到服务器实际上是软件下载(setup.exe的东西)。 我想要做的是以某种方式让nginx在静态URL下提供最新的下载包。 因此,只要myapp-setup-1.0.msi是相应内容目录中的最新文件, http://www.example.com/download/myapp就会导致myapp-setup-1.0.msi的下载。

我试图通过使用符号链接来实现这一点,但随后出现的问题是,必须设置一个适当的头(Content-Disposition),其中包含浏览器显示的文件名,而且我不知道如何从目录中获取符号链接的目标文件名nginxconfiguration。 我认为这可能是不可能的。

这是迄今为止的configuration:

server { listen 80; server_name www.example.com example.com; access_log /var/log/nginx/download.access.log; location /download/ { alias /var/www/download/; default_type application/octet-stream; } location /download/myapp/ { alias /var/www/download/myapp/; index latest.msi; default_type application/octet-stream; if ($request_filename ~* ^.*/([^/]*?)$) { set $exits true; set $msi $1; } if ($msi = latest.msi) { set $msi "myapp-setup-1.0.msi"; } if ($exits) { add_header Content-Disposition: "attachment; filename=$msi"; } } } 

请注意,latest.msi是指向myapp-setup-1.0.msi的符号链接。

那么有关如何通过使用nginx的静态url实现最新文件的下载的任何想法? 或者,这种情况下使用某种cgi脚本更有意义吗?


编辑

我使用了像DrGkillbuild议的embedded式perl模块,下面是一个简短的perl代码片断:

 perl_set $link_target ' sub { my $r = shift; my $filename = $r->filename; if (-l $filename) { return readlink $filename; } else { return ""; } } '; 

您可以testing语句try_files之间的混合:

http://wiki.nginx.org/HttpCoreModule#try_files

if_modified_since声明:

http://wiki.nginx.org/HttpCoreModule#if_modified_since

最后,embedded式Perl模块可以用更多选项返回目录中最新文件的名称。

http://wiki.nginx.org/EmbeddedPerlModule