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

时间:2012-01-04 20:31:12

标签: php wordpress fastcgi cherokee x-sendfile

我正在寻找一种方法来确认X-Sendfile是否正确处理由脚本(PHP)返回给Web服务器的请求。图像正在正确提供,但我想我会在curl请求中看到标题。

$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg
HTTP/1.1 200 OK
Date: Wed, 04 Jan 2012 17:19:45 GMT
Server: Cherokee/1.2.100 (Arch Linux)
ETag: "4dd2e306=9da0"
Last-Modified: Tue, 17 May 2011 21:05:10 GMT
Content-Type: image/jpeg
Content-Length: 40352
X-Powered-By: PHP/5.3.8
Content-Disposition: inline; filename="amos-lee-feature.jpg"

配置

在FastCGI中使用PHP-FPM 5.3.8

切诺基1.2.100
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
(由vServer设置>行为> Extensions php>处理程序:允许X-Sendfile [选中已启用])

Wordpress网络/ WPMU 3.3.1
define('WPMU_SENDFILE',true);包括wp-config.php之前的wp-settings.php中设置了header( 'X-Sendfile: ' . $file ); exit; 。这将触发以下代码在特定博客的WP's wp-includes/ms-files.php:50提供文件中执行:

exit();

我已确认上述代码段正在执行时,在header('Content-Disposition: inline; filename="'.basename($file).'"');调用之前添加了一个用于处置的附加标头。 Content-Disposition与curl结果一起出现,而不是最初在ms-files.php代码中。添加的代码是:
ms-files.php


研究

我有:

  • 在进行配置更改后重新启动了php-fpm / cherokee守护进程。
  • php.net/readfile 的评论中尝试了几个技巧,并用X-Sendfile中的简单标题替换了示例中更完整的代码。
    • php.net/manual/en/function.readfile.php
    • www.jasny.net/articles/how-i-php-x-sendfile /
    • * codeutopia.net /博客/ 2009/03/06 /送文件,更好,Apache的mod_xsendfile及PHP / *
  • 确认[切诺基支持] [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是否一致。
  • 发现我由于缺乏声誉而无法发布超过2个链接。

问题

  • 当标题正常工作或标题被删除时,X-Sendfile会出现在标题中吗?
  • 是否可以使用访问日志来确定$ curl -I http://blog2.stageserver.net/wp-includes/ms-files.php?file=/2011/05/amos-lee-feature.jpg HTTP/1.1 200 OK Date: Fri, 06 Jan 2012 15:34:49 GMT Server: Cherokee/1.2.101 (Ubuntu) X-Powered-By: PHP/5.3.6-13ubuntu3.3 Content-Type: image/jpeg X-Sendfile: /srv/http/wordpress/wp-content/blogs.dir/2/files/2011/05/amos-lee-feature.jpg Content-Length: 40352 是否有效?

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

更新

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

在切诺基中禁用允许X-Sendfile:

{{1}}

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

3 个答案:

答案 0 :(得分:0)

根据source on github X-​​Sendfile标题将被删除。

如果我正确浏览文件,只有在调试模式下编译时才会成功记录。

答案 1 :(得分:0)

您可以检查使用和不使用xsendfile发送大文件的内存使用情况。

答案 2 :(得分:0)

它们被剥离,仅仅因为它们存在会阻止其中一个原因使用它,即在没有接收方知道所服务文件的位置的情况下提供文件。