Nginx - 仅允许通过引用 URL 访问文件夹目录

Nginx - 仅允许通过引用 URL 访问文件夹目录

我是前端 Web 开发人员。提前致歉。

我的公司希望将我们软件的新版本存储在运行 Nginx 的 Web 服务器上,由WP 引擎

这些构建的文件路径将是company.com/downloads/file.zip我们希望限制对此文件夹中文件的访问,除非它们来自位于客户登录门后面的特定引用 URL。

  • 如果用户点击允许的引荐来源内的任何文件的链接/downloads/,用户就会获得文件
  • 如果用户点击来自其他来源的链接,则返回 404 或重定向到主页
  • 如果 referer 为空或者直接尝试访问,则返回 404 或重定向到主页

我找到了一个关于防止图像热链接的资源(我们将处理 .zip 文件),它可能对我有用,但我需要有关这种语言语法的帮助。它可能有很多问题。

location ~ /downloads/$ {
valid_referers none blocked ~.allowed_domain.com;
if ($invalid_referer) {
return 404;
}
}

WP Engine 不允许我自己添加 Nginx 代码,所以我必须将我希望他们实现的代码发送给他们。如果有人知道如何做并能帮助我,我将不胜感激!

答案1

其他可能性是使用X-加速标头。我不知道您的使用情况,因此它可能不太合适。

X-加速是 nginx 特定的标头。您可以在 PHP 脚本中发出该标头 - 例如header("X-Accel-Redirect: /private-downloads/magic.iso") 当 nginx 识别此标头时,它将服务器magic.iso位于 中的文件内容/data/private-downloads

因此,你的任务是准备download.php检查授权,并使用以下方式进行响应X-加速标题或重定向到登录屏幕。

/private-downloads/nginx.conf 中的定义

location /private-downloads/ {
    internal;    # this
    alias /data/private-downloads;
    # this should be located outside of HTTP server root
}

有关更多详细信息,请查看 serverfault 上的 x-accel 问题。1

答案2

您可以使用valid_referersnginx 指令。(nginx 文档

location /downloads/ {
    alias /var/www/downloads;
    valid_referers  www.example.me ;

if ($invalid_referer) {
        return 404;
    }
}

我个人从未在生产中尝试过这种方法,因为我更喜欢使用X-Accel 标头。您可以在 PHP 脚本中验证您的用户,然后发送 nginx 标头 X-accel。标头将要求 nginx 通过 nginx 提供静态文件。

相关内容