问题标签 [x-sendfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1315 浏览

php - 有什么方法可以判断 X-Sendfile 下载何时完成?

为了清理网络服务器上的临时文件,我想知道是否有任何方法可以判断 X-Sendfile 下载何时完成......也许在某个地方的日志中?我目前的理解是,一旦你传递了标题,它基本上是独立的。

0 投票
5 回答
7688 浏览

php - X-SendFile on Apache2 (PHP) 服务 0B 文件,但没有错误

我安装了 mod_xsendfile 似乎已经成功了;xsendfile.load 出现在 /etc/apache2/mods-enabled 中,我在运行测试脚本时没有发现任何错误。但是,每次我运行它时,都会得到一个 0B 文件。

这是我的测试脚本:

显然,我有一个文件存储在 /var/storage/media/sample.mp4 中,它只有 25MB,如果我这样做的话,它的服务非常好:

我在 /var/storage 和 /var/www 的 .htaccess 文件中也有这个(包含所有这些的文件都存储在 /var/www/files/index.php 中):

就像我说的那样,我没有收到任何错误,PHP 可以肯定地访问该文件,但我必须在 x-sendfile 配置中遗漏一些东西......这提醒了我,我注意到在 mods-enabled 中几乎每个 mod 都有一个 . load 和 .conf,但是 xsendfile 只有 .load,但其他一些也有,所以这和它有什么关系吗?

谢谢。

0 投票
1 回答
11287 浏览

python - Django - 了解 X-Sendfile

我一直在使用 Django 对具有访问控制的文件下载进行一些研究。我的目标是完全阻止对文件的访问,除非由特定用户访问。我读过在使用 Django 时,X-Sendfile 是实现这一目标的选择方法之一(基于其他 SO 问题等)。我对在 Django 中使用 X-Sendfile 的基本理解是:

  1. 用户请求 URI 以获取受保护的文件
  2. Django 应用程序根据 URL 决定返回哪个文件,并检查用户权限等。
  3. Django 应用程序返回一个 HTTP 响应,并将“X-Sendfile”标头设置为服务器的文件路径
  4. Web 服务器找到该文件并将其返回给请求者(我假设 Web 服务器还删除了“X-Sendfile”标头)

与直接从 Django 中获取文件相比,X-Sendfile 似乎是实现受保护下载的更有效方法(因为我可以依赖 Nginx 来提供文件,而不是 Django),但给我留下了 2 个问题:

  1. 我对 X-Sendfile 的解释至少在抽象上是正确的吗?
  2. 它真的安全吗,假设我不提供正常的前端 HTTP 访问(例如http://www.example.com/downloads/secret-file.jpg)到存储文件的目录(即, '不要把它放在我的public_html目录中)?或者,精通技术的用户是否可以检查标题等并逆向工程访问文件(然后分发)的方式?
  3. 是不是性能真的相差很大。我会通过直接从 Django 提供 150Mb 文件的 8b 块下载来使我的应用程序服务器陷入瘫痪,还是这种非问题?我问的原因是因为如果两个版本几乎相等,那么 Django 版本会更可取,因为我能够在 Python 中执行操作,例如记录已完成下载的数量、下载的统计带宽等。

提前致谢。

0 投票
4 回答
1225 浏览

codeigniter - xsendfile 仅适用于索引

我正在尝试使用代码点火器框架中的 xsendfile 向用户发送文件。

一切都安装正确,我的问题是它似乎只能从路线上工作,即使每个页面都来自 index.php 。

这是我的功能:

如果我把它放在我的 index.php 的顶部并加载根它工作正常,但如果我尝试从 domain.com/controller/function 访问它,它会返回 404 错误。

它肯定是在使用 index.php 文件,因为如果我用 die("test"); 替换函数调用;这显示在屏幕上。

我相信这与 xsendfile 必须访问该文件的权限有关,但由于它是从根 index.php 工作的,我原以为它会拥有完整的权限,大概它基于请求 url 是什么,我觉得很奇怪.

所以....有没有人对我如何让xsendfile通过codeigniter工作有任何建议,比如“domain.com/files/get/12”这样的url?

0 投票
2 回答
1682 浏览

ruby-on-rails - Rails/Dragonfly/Apache - Rack::Cache - 如何使用 X-Sendfile?

我正在使用Dragonfly为我的 Rails 应用程序提供处理后的图像。Dragonfly 依赖Rack::Cache来访问那些处理过的图像,这样Dragonfly 就不必一次又一次地处理这些图像,从而浪费 CPU 时间。

我的问题从这里开始:如果我是对的,通过 Rack::Cache 发送文件仍然占用 Rails 进程,那么查看 30 个图像的页面,即使这些图像的文件大小很小,也会很好地占用 Rails 进程迅速地。如果更多的访问者来查看该页面,那么他们将体验到非常缓慢的响应时间。如何通过 X-Sendfile 获取这些文件?

我在 中设置了以下内容production.rb,但我知道这些是针对 Rails 的资产,而不是 Dragonfly 文件:

我知道 Rack::Cache 以某种方式支持 X-Sendfile (可能通过Rack::Sendfile),因为它会产生一个响应#to_path. 但是,我不知道如何启用它。当我检查来自 Rack::Cache 的文件时,我没有看到任何 X-Sendfile 信息:

我知道,根据网络上的帖子,我应该看到如下内容:

最后我不知道我必须配置它的 Dragonfly 还是 Rack::Cache (或两者)。如何让 Dragonfly 和/或 Rack::Cache 通过 X-Sendfile 提供文件

关于我的设置的信息:

  • 导轨 3.1.1
  • 乘客 3.0.9
  • 中央操作系统
  • 据我所知,已安装 Sendfile 模块。我已经在我的虚拟主机配置XSendFile OnXSendFilePath /path/to/app指定了,并且 Apache 没有抱怨该指令XSendFile不存在。

谢谢!

更新 2011 年 11 月 6 日

基于这个旧的更新,只要Rack::Sendfile放在前面Rack::Cache,就会使用X-Sendfile。我做到了,这就是我的中间件的样子。但是,这些文件仍然没有 X-Sendfile 标签。同样,我不知道这是否是确定 X-Sendfile 是否启用的可靠方法,所以我检查了乘客队列。当我访问一个页面时,队列似乎受到了很大的阻碍。

2011 年 11 月 7 日更新

看来这纯粹是 Rack::Cache 和 Rails 3.1 的问题。虽然 Rack::Cache 支持通过 Rack::Sendfile 使用 X-Sendfile (就像我上面提到的,Rack::Cache,当使用Disk EntityStore时,to_path因为它返回的body 是 File 的子类,所以它响应了),Rails 3.1使用自己的存储解决方案。Rails 3.1 使用ActiveSupport::Cache::FileStore,如果您没有在production.rb文件中指定任何内容,则默认设置。

FileStore 的问题在于它返回的主体是要向上游发送的响应的一部分,因为该主体不响应to_path. 主体是ActiveSupport::Cache::Entry的一个实例。您可以在此处看到,当要求 FileStore 读取缓存文件时,它会通过File.open('/path/to/file') {|f| Marshal.load(f) }返回 Entry 实例来读取它。最终被上游传递并返回给客户端的值是Entry#value

我的问题

为了帮助我决定是否应该修补这个问题,或者让 Rails 使用 Rack::Cache 自己的磁盘存储,我有一些问题:

  1. Rails 3.1 没有使用 Rack::Cache 自己的存储解决方案的原因是什么?为什么 Rails 有自己的?
  2. 使用 Marshal 是否有原因?是否有理由应该发回数据字节流?

我比平时更深入,如果我理解正确,我会感到惊讶。我希望能找到答案!

0 投票
1 回答
221 浏览

ruby - Rails3 开发模式下的 send_file 问题

我在这里看到了关于 send_file 和 apache/nginx 的问题,并且都指向 production.rb 中的这一行

很好,但是发展呢?我现在正在开发中,将 url 粘贴到我的浏览器会得到一个 0 字节的 zip 文件。

还值得注意的是,这在 Mac 和 Windows 之前一直运行良好(两者都为 1.8.7 MRI - windows 使用 apache 和 Thin)。我们切换到 JRuby,一切都变得松散了。现在,即使我切换到我的 mri gemset(使用 rvm),我仍然会得到 0 字节的 zip 文件。

可能是什么问题,我应该如何调试和解决这个问题?

0 投票
2 回答
6917 浏览

php - XSendfile 不工作 - PHP、Apache、Cpanel

强烈建议我使用 XSendfile,因为我们从服务器提供相当大的文件。服务器正在运行 Cpanel。以前我们使用的是直接强制下载脚本,在某些浏览器中也不能很好地工作。希望用 XSendfile 用一块石头杀死两只鸟。

好的,我们的主机已经在我们的服务器上启用了 Xsendfile。我写了一个快速测试脚本:

当我运行它时,我会收到下载提示。但是发送的文件总是0kb。

进行一些研究,似乎您需要在 apache 配置文件或 htaccess 文件中设置各种内容。我还被告知将其添加到 apache 配置中不是一个好主意,否则它可能会在更新时被覆盖。我宁愿在 htaccess 中执行此操作,因为我没有直接访问 apache 配置的权限,而且我更愿意拥有使用 htaccess 执行此操作的控制权。

如果我可以让它工作,当然。

因此,我在 htaccess 文件中添加了以下内容:

XSendFilePath 上的 XSendFile /home/deli/central XSendFileAllowAbove On

(脚本到中央文件目录的相对路径是../../deli/central)

如果我将这些行添加到 htaccess,并将其放在 public_html 目录(与测试脚本相同的目录)中,那么当我运行测试脚本时,我会收到 500 错误。快速查看错误日志显示:

/home/north/public_html/.htaccess:此处不允许 XSendFilePath

谁能告诉我我可能做错了什么?

ps - 我刚刚读到在 apache 配置中执行此操作效率更高,因此服务器不必爬取并加载所有 htaccess 文件。不知道这是真是假。

非常感谢您的帮助,这对项目来说有点令人兴奋:)

ps 我忘了提 - 如果我在脚本中直接强制下载,使用相同的 $file 路径,文件下载就好了。所以路径似乎是正确的。

0 投票
3 回答
5778 浏览

php - 测试 X-Sendfile 标头是否正常工作

我正在寻找一种方法来确认 X-Sendfile 是否正确处理通过脚本 (PHP) 传回网络服务器的请求。图片已正确提供,但我想我会在 curl 请求中看到标题。

配置

在 FastCGI 中带有 PHP-FPM 5.3.8 的Cherokee 1.2.100
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
:( 由 vServer > Behavior > Extensions php > Handler 设置:允许 X-Sendfile [检查已启用])

Wordpress Network / WPMU 3.3.1 :
define('WPMU_SENDFILE',true);设置在wp-config.php下面刚刚wp-settings.php包含之前。这将触发在WP 的 wp-includes/ms-files.php:50中执行以下代码,为特定博客提供文件:

我已经确认上面的代码片段正在执行,方法是在exit();调用之前添加一个额外的头文件进行处置。Content-Disposition 存在于上面的 curl 结果中,而不是最初在 ms-files.php 代码中。添加的代码是:
header('Content-Disposition: inline; filename="'.basename($file).'"');


研究

我有:

  • 进行配置更改后重新启动 php-fpm / cherokee 守护程序。
  • php.net/readfilems-files.php的评论中尝试了几个技巧,并用示例中更完整的代码 替换了简单的标题。
    • php.net/manual/en/function.readfile.php
    • www.jasny.net/articles/how-i-php-x-sendfile/
    • *codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/*
  • 确认了 [cherokee support][5] 并测试了 [使用和不使用][6] 压缩,尽管我认为它不会适用,因为我的图像服务正确。我还从 lighttpd 帖子中发现了一个可疑的类似问题。
    • *cherokee-project.com/doc/other_goodies.html*
    • code.google.com/p/cherokee/issues/detail?id=1228
    • webdevrefinery.com/forums/topic/4761-x-sendfile/
  • 在 SO 上找到了一个可能表明标题被剥离的简介
    • stackoverflow.com/questions/7296642/django-understanding-x-sendfile
  • 从 curl、wget、Firefox、Chrome 和 web-sniffer.net 测试,上面的 headers 是一致的。
  • 发现由于缺乏声誉,我不能发布超过 2 个链接。

问题

  • X-Sendfile当它正常工作或被剥离时会出现在标题中吗?
  • 可以使用访问日志来确定是否X-Sendfile正常工作吗?

我在这里寻找一般故障排除提示或信息,不一定特定于 PHP / Cherokee。

更新

我找到了一种在测试或沙盒环境中确认 X-Sendfile 或 X-Accel-Redirect 的合适方法:禁用 X-Sendfile 并检查标头。

在 Cherokee 中禁用 Allow X-Sendfile:

图像不会在浏览器中加载,但您可以看到标题存在。重新启用 Allow X-Sendfile 后,图像会加载,您可以确信 X-Sendfile 正在工作。

0 投票
1 回答
5551 浏览

php - X-Sendfile 具体配置.htaccess 问题

我已经对此有疑问了,我不知道再次发帖的礼仪,但我觉得上一个问题走错了路。

我整天都在研究配置 XSendfile 以在我们的 apache 服务器上使用 PHP 的主题。我读得越多,我得到的信息就越矛盾。

因此,如果有人相当熟悉 XSendfile,那么此时您的说明将非常有帮助和赞赏。

主机说他们已经安装了 XSendfile。当我尝试运行测试 XSendfile 脚本时,我没有收到任何错误,只有一个 0kb 的文件。所以我假设他们实际上已经安装了这个东西。

接下来网上很多帖子都说0kb的文件归结为配置问题。似乎 XSendfile 的更新版本需要这些行:

在 apache 配置或 htaccess 文件中。每当我将这些行放入本地 htaccess 文件时,它都会使整个站点崩溃并出现 500 错误。如果我把它们放在顶部或底部,或者我选择放在第二行的任何路径,它会使整个站点崩溃。

几个小时前,我读到有人与作者交谈,实际上您不能在 htaccess 中配置 XSendfile,只能在 apache 配置中配置。是否可以使用 htaccess 配置 XSendfile?一半的网站说是,一半的网站说不,或者只是谈论 apache 配置。

如果可以使用 htaccess 来做到这一点,任何人都可以给我一个不会使整个站点崩溃的 htaccess 示例吗?我的 htaccess 目前包含以下 3 行:

抱歉,如果我听起来很紧张,这对这个项目的最后期限来说是一个真正的麻烦,我似乎无法得到一个直接的答案或在任何地方找到正确的信息。

0 投票
1 回答
109 浏览

php - 有没有办法判断 x-sendfile 是否已经启动?

我认为这个主题说明了一切。

我希望在加载页面时开始下载,然后在脚本确定下载开始后加载页面正文。