问题标签 [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.
php - 下载大文件问题
我有一个在我的本地机器上运行良好的下载脚本。但上传到服务器后,当我的 ios 应用程序调用脚本时,它会在 100-120 秒后停止。我只是将脚本更改为另一台服务器。它运行良好。我不知道服务器中缺少什么配置(下载过程中出现问题的配置)?我google了很多,但仍然没有解决方案。所以我的问题是我该如何解决这个问题?真正的问题是什么?我的谷歌搜索之一达到了 Xscend-file 。但我怀疑它是否支持部分下载?我的脚本是..
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 一起使用,尽管我应该无需任何额外设置即可访问文档根目录。
caching - Cloudflare 是否仍会在 xsendfile 后面缓存文件
我已经建立了一个 Wordpress Woocommerce 店面。我想设置将通过 XSendFile 模块下载的可下载产品。
但是,我的下载文件非常大(大约 50mb),因此我计划设置 Cloudflare 来缓存下载文件,这样我就不会超出托管服务的带宽限制。
我的问题是,Cloudflare 会缓存通过 Apache 的 XSendFile 模块链接的文件吗?
对不起,如果这是一个基本问题。我只是想弄清楚这种设置是否可行,或者我是否需要找到替代解决方案。
注意:忘记添加下载文件是 pdf 文件。
php - 大型下载过早结束
我正在从我的服务器提供大约 6.5gb 的大量下载,并使用 PHP 和 x-sendfile 进行下载。
这几个月来一直运行良好,但是最近对于 3gb-5.5gb 的用户来说,下载已经提前结束。
在浏览器(尝试过 Chrome、Firefox 和 IE)中没有给出错误,它们的行为就像下载已完成,但文件大小小于应有的大小。
根据我有限的理解,这通常是因为在一段时间内没有发送数据,浏览器将其误认为下载已完成。
但是,我正在努力寻找有关浏览器在这方面的行为的任何具体信息。
我已经联系了我的主机,看看他们是否可以帮助他们最终确定问题,也许连接被中断或其他什么,但是他们坚持认为这一定是我的服务器配置的问题,即使服务器的设置没有任何变化大约在这开始的时候。
现在我完全不知道如何调查这个问题。下载停止的时间是完全随机的。不同的文件大小,不同的时间量,服务器日志或浏览器中没有错误。
任何人都可以提供有关如何调查此问题的任何建议,或者之前是否有人遇到过类似的问题并找到了解决方法?
amazon-web-services - 如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?
如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?amazon 和 epel 的默认软件包存储库没有 httpd 2.4 的软件包,仅适用于 httpd 2.2。如果可能的话,我宁愿不编译模块。谢谢你。
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 以正确的方式提供文件(也是非常重的文件)。
我知道这可能是一个安全问题,但我会尝试将其指向我的应用程序的最新版本,因为指向当前符号链接不起作用。
ruby - Rails 3.2 xsendfile 不工作
我必须下载需要身份验证的静态文件。我正在关注http://makandracards.com/makandra/990-speed-up-file-downloads-with-rails-apache-and-x-sendfile和https://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 标头,但文件不会在浏览器中播放。
我尝试了三天,我已经阅读了谷歌上的所有内容。
我有一种感觉,我错过了一些简单的东西。如果有人有任何建议,请告诉我!
谢谢。
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
. 所以看来我们可以得出以下结论
- 内容长度和文件大小处理正确。
- X-SendFile 没有找到该文件,或者:
- X-SendFile 不处理文件。
事实上,注释掉 X-SendFile,就像这样:
产生相同的结果;从执行X-Sendfile
标头中听不见。
ruby-on-rails - Rails 应用程序的 Nginx X-Accel-Redirect 配置
在为 nginx 设置 X-Accel-Redirect 的所有教程中,总是有一些关于指示某个位置是私有的,如下所示:
我发送给用户的文件位于 RAILS_ROOT/private_uploads 中。这不在公用文件夹内,这意味着没有直接指向此文件夹中文件的 URL。
那么我是否正确假设我可以忽略我的设置的那一点 nginx 配置?如果没有,我需要什么配置?
我正在使用Passenger,顺便说一句,我的配置非常基本:
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 的正确方法是什么?
关于发生了什么的任何线索?几周以来我一直在努力解决这个问题,我需要让它发挥作用。欢迎其他可行的解决方案。