我是 Linux 新手。我有一个 PHP 脚本,它根据一些参数的正确性决定是否向用户提供文件。我通过 nginx 中的 XSendFile 功能提供文件。我想阻止对文件的直接访问,以便强制用户通过 PHP 脚本下载它们。
我的问题是,如果我将文件权限设置为 640,当我尝试直接下载时,我会收到 403 Forbidden,但我也无法使用脚本下载它。而如果我将其设置为 644,我就可以同时执行这两件事(我认为需要添加执行权限才能启用文件的直接下载。我错了吗?)我应该如何设置权限才能实现我需要的功能?
编辑:请注意,我无法将文件移动到 Web 根目录之上,因为有些文件必须具有直接访问权限,而其他文件则不能。因此,我必须将它们全部保存在同一个目录中,并能够选择性地启用/禁用直接下载。
答案1
Nginx 有一个指令。您可以将某个位置标记为“内部”,这意味着 Nginx 只会将其作为重写、X-Accel-Redirect 等的结果来处理。如果您尝试直接请求此位置,您将收到 404“未找到”响应。
location /downloads {
internal;
}
location /scripts {
# should issue X-Accel-Redirect: /downloads/file.ext
}