问题标签 [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 投票
2 回答
128 浏览

php - 下载大文件问题

我有一个在我的本地机器上运行良好的下载脚本。但上传到服务器后,当我的 ios 应用程序调用脚本时,它会在 100-120 秒后停止。我只是将脚本更改为另一台服务器。它运行良好。我不知道服务器中缺少什么配置(下载过程中出现问题的配置)?我google了很多,但仍然没有解决方案。所以我的问题是我该如何解决这个问题?真正的问题是什么?我的谷歌搜索之一达到了 Xscend-file 。但我怀疑它是否支持部分下载?我的脚本是..

0 投票
2 回答
988 浏览

php - mod_xsendfile 不适用于 CGI 和 mod_rewrite

我正在尝试使用apache 模块 xsendfile在文件流式传输期间获得更好的性能。问题是,如果我不使用 PHP 作为 CGI 版本并且如果我不为我的 url使用重写规则,它就可以工作。

问题一:mod_rewrite

在浏览器中调用这个将起作用:

这个会给我一个404:

重写规则工作正常。404 错误是由 xsendfile 模块触发的。如果我在 htaccess 中的规则中添加“R”(就像在这个问题中建议的那样),它将再次起作用,因为我被重定向到上面给出的第一个地址。但重定向不是我想要的。

我也看了这篇关于符号链接的帖子,但我认为这不能成为我帖子的解决方案,只要我使用使用 getenv('document_root') 生成的绝对路径?这个路径不应该使用任何符号链接,是吗?或者我现在错过了什么?

问题 2:CGI

如果我将 PHP 模式切换到 cgi 版本,我将得到一个 0 字节的文件。这似乎与服务器在不安装任何 xsendfile 的情况下做出反应的行为相同。


我已经将模块更新到最新版本。还测试了绝对和相对链接,但没有任何成功。除此之外,停用输出压缩不起作用。

为了完成给定的信息,这里是我正在使用的 PHP 代码:

有人有线索吗?

更新 (2014-01-06)

第二个问题解决了:我不知道为什么,但是在 apache 配置中打开 xsendfile 而不是使用 htaccess 文件后它正在工作。(一旦其他问题解决,我也会在下面添加答案。)

除了第一个:首先我没有在 httpd.conf 中添加任何选项,因为它应该使用标准配置。无论如何,我现在要求我的提供商将绝对项目路径添加到 XSendFilePath 的白名单中作为全局设置。这暂时解决了 1. mod_rewrite 的问题。但这似乎不是我的情况的真正解决方案,因为我在服务器上运行许多不同的项目,每个项目都有一个单独的下载路径。因此,每次我开始一个新项目时,我都需要让我的提供商为配置添加一个新路径。我仍然无法将 x-sendfile 与 mod_rewrotite 一起使用,尽管我应该无需任何额外设置即可访问文档根目录。

0 投票
1 回答
194 浏览

caching - Cloudflare 是否仍会在 xsendfile 后面缓存文件

我已经建立了一个 Wordpress Woocommerce 店面。我想设置将通过 XSendFile 模块下载的可下载产品。

但是,我的下载文件非常大(大约 50mb),因此我计划设置 Cloudflare 来缓存下载文件,这样我就不会超出托管服务的带宽限制。

我的问题是,Cloudflare 会缓存通过 Apache 的 XSendFile 模块链接的文件吗?

对不起,如果这是一个基本问题。我只是想弄清楚这种设置是否可行,或者我是否需要找到替代解决方案。

注意:忘记添加下载文件是 pdf 文件。

0 投票
0 回答
705 浏览

php - 大型下载过早结束

我正在从我的服务器提供大约 6.5gb 的大量下载,并使用 PHP 和 x-sendfile 进行下载。

这几个月来一直运行良好,但是最近对于 3gb-5.5gb 的用户来说,下载已经提前结束。

在浏览器(尝试过 Chrome、Firefox 和 IE)中没有给出错误,它们的行为就像下载已完成,但文件大小小于应有的大小。

根据我有限的理解,这通常是因为在一段时间内没有发送数据,浏览器将其误认为下载已完成。

但是,我正在努力寻找有关浏览器在这方面的行为的任何具体信息。

我已经联系了我的主机,看看他们是否可以帮助他们最终确定问题,也许连接被中断或其他什么,但是他们坚持认为这一定是我的服务器配置的问题,即使服务器的设置没有任何变化大约在这开始的时候。

现在我完全不知道如何调查这个问题。下载停止的时间是完全随机的。不同的文件大小,不同的时间量,服务器日志或浏览器中没有错误。

任何人都可以提供有关如何调查此问题的任何建议,或者之前是否有人遇到过类似的问题并找到了解决方法?

0 投票
1 回答
3860 浏览

amazon-web-services - 如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?

如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?amazon 和 epel 的默认软件包存储库没有 httpd 2.4 的软件包,仅适用于 httpd 2.2。如果可能的话,我宁愿不编译模块。谢谢你。

0 投票
1 回答
1246 浏览

ruby-on-rails - Capistrano 和 X-Sendfile

我正在尝试使 X-Sendfile 工作以使用 capistrano 为我的繁重附件提供服务。我发现 X-Sendfile 不适用于符号链接。我怎么能处理 Capistrano 符号链接的文件夹中的文件呢?

我的网络服务器是 apache2 + 乘客

在我的production.rb中:

在我的控制器动作中:

我的文件系统结构(其中“->”代表“符号链接”,缩进表示子文件夹):

我的apache 在 XSendFilePath 上配置 XSendFile / #也试过 /home/ftp_user/videos

我的应用程序能够提供小文件,但对于大文件,它会给出 NoMemoryError(无法分配内存)

我认为它没有使用 x-sendfile,因为如果我不使用它,行为是相同的。

这是我要提供的文件的响应标头

我真的不知道如何调试它,如果它是 x-sendfile 问题,或者我正在尝试为符号链接问题做一些不可能的事情

编辑: 按照接受的建议答案,它“神奇地”开始工作!

我以这种方式创建了一个 capistrano 任务:

在 finalize_update 之后我没有设法运行它,所以我在重新启动后手动运行它。

我以这种方式更正了我的 apache 配置:

(在我将 x-sendfile 指向 ftp 文件夹之前)

在我的响应标题中,现在 X-Sendfile 也没有出现,并且我得到了 206 - 部分内容,但一切似乎都正常工作,并且 apache 以正确的方式提供文件(也是非常重的文件)。

我知道这可能是一个安全问题,但我会尝试将其指向我的应用程序的最新版本,因为指向当前符号链接不起作用。

0 投票
0 回答
345 浏览

ruby - Rails 3.2 xsendfile 不工作

我必须下载需要身份验证的静态文件。我正在关注http://makandracards.com/makandra/990-speed-up-file-downloads-with-rails-apache-and-x-sendfilehttps://tn123.org/mod_xsendfile/

我已经设置config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache在 production.rb

控制器:

阿帕奇配置:

即使,我把它,它没有发送任何 x-sendfile 标头。这很奇怪,但如果我删除 X-Sendfile On 和 X-SendfilePath,它会设置 X-Sendfile 标头,但文件不会在浏览器中播放。

我尝试了三天,我已经阅读了谷歌上的所有内容。

我有一种感觉,我错过了一些简单的东西。如果有人有任何建议,请告诉我!
谢谢。

0 投票
2 回答
3745 浏览

php - xsendFile 下载有 0 个字节

在 LAMP 堆栈上,我无法让 xSendFile 工作。问题是下载有 0 个字节。

为了确保我安装了 xSendFile,我已将其添加到我的.htaccess文件中:

(我无法对此进行测试,apache_get_modules()因为我将 PHP 作为 fastCGI 运行。)

然后我有以下PHP代码:

此代码按预期运行;我从中得出结论,必须安装和/或启用 xSendFile。然后我用 YiixSendFile和普通的 PHP 运行这个脚本。在这两种情况下,下载窗口都会打开,但始终为 0 字节。

我已经黔驴技穷了。我究竟做错了什么?

为了充分披露,以下是相关部分httpd.conf

编辑:

输出压缩关闭:

Chrome 显示以下标题:

2014 年 3 月 26 日更新

在测试@gabrieloliveira 的建议时,我发现了以下内容:

这个脚本(我在其中添加echo '12345678901234567890';)生成了一个包含以下 16 个字符串的文件的下载1234567890123456。16 个字符与hello.txt. 所以看来我们可以得出以下结论

  1. 内容长度和文件大小处理正确。
  2. X-SendFile 没有找到该文件,或者:
  3. X-SendFile 不处理文件。

事实上,注释掉 X-SendFile,就像这样:

产生相同的结果;从执行X-Sendfile标头中听不见。

0 投票
0 回答
278 浏览

ruby-on-rails - Rails 应用程序的 Nginx X-Accel-Redirect 配置

在为 nginx 设置 X-Accel-Redirect 的所有教程中,总是有一些关于指示某个位置是私有的,如下所示:

我发送给用户的文件位于 RAILS_ROOT/private_uploads 中。这不在公用文件夹内,这意味着没有直接指向此文件夹中文件的 URL。

那么我是否正确假设我可以忽略我的设置的那一点 nginx 配置?如果没有,我需要什么配置?

我正在使用Passenger,顺便说一句,我的配置非常基本:

0 投票
3 回答
1472 浏览

ruby-on-rails - Rails + X-Sendfile 向 Ipad 提供大型视频

我有一个提供大型(数百 MB)视频文件的应用程序,它在桌面浏览器上运行良好,在 Apache 上使用 Rails + X-Sendfile。一个重要的要求是这些视频必须是私有的并且只对登录用户可见,所以这就是我使用 Rails 为它们提供服务的原因。

一切都与其他设备完美配合。我以这种方式提供视频:

Ipad的请求需要字节范围标头。一个解决方案(不能完美地工作)是这样的:

使用这个解决方案,我遇到了大于 50mb 的视频的问题,更重要的是,我给 rails 一个它不应该承担的责任。通过 x-sendfile 模块处理流式传输的重负载应该是 apache。但我不知道怎么做。该send_data方法没有 x-sendfile 参数,涉及 send_file 方法的解决方案不起作用。

我发现这两个问题与我的相似,但它们不起作用:rails 媒体文件流通过 send_data 或 send_file 方法接受字节范围请求通过 rails 将 mp4 文件提供给 Ipad 的正确方法是什么?

关于发生了什么的任何线索?几周以来我一直在努力解决这个问题,我需要让它发挥作用。欢迎其他可行的解决方案。