NGINX从后端的另一个URL下载文件

时间:2013-10-27 16:19:59

标签: url redirect nginx download hide

NGINX conf文件正则表达式的全新手。我正在运行一个在NGINX Web服务器下运行的PHP脚本。我试图让访问者下载一​​个与URL不同的附件。例如,如果链接是:

http://mysite.com/attachement/sample.jpg

它实际上将从另一个目录“media / uploaded”

提供文件
http://mysite.com/media/uploaded/sample.jpg

根据一些研究,我添加了类似的东西

location /attachment/ {      
    try_files $uri /media/uploaded/$uri;
}

但它不起作用。我的意图是不要让用户浏览器重定向到正在查看URL的页面,只需下载文件扩展名,如* .png,* .jpg,* .zip等。这个脚本工作正常,在Apache中喜欢这个,但它不是在Nginx。

虽然它并不重要,但是想知道是否也可以让他们下载* .php,* .fla文件而不执行它们是出于明显的安全原因。我记得很久以前使用支持票系统也允许这样做。不知道是否可以从Nginx配置文件中删除它。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您希望它们像精确镜像,最简单的方法是使用alias

location /attachment/ {
    alias /media/uploaded;
}

如果您想使用try_files,则需要指定root

location ~ /attachment/(.*) {
    root /media/uploaded;
    try_files $1 =404; # or replace '=404' with any fallback rule
}

您的规则可能无法正常工作,因为$uri已经包含/attachment,因此正在测试的网址为/media/uploaded/attachment/image.jpg,但该网址并不存在,可以使用正则表达式修复,就像我在第二种方法中所做的那样,但这样做太多了,你的情况更适合alias

答案 1 :(得分:0)

感谢您的提示。它们都不起作用,但能够添加更多代码来使用别名

location  ~ ^/attachment/([^\s]+(?=\.(jpg|gif|png|zip|))\.\2) {
    alias /home/websites/public_html/media/uploaded/$1;
}

从另一篇文章中获取提示(忘记它的位置)。谢谢!