8

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 を使用するCherokee 1.2.100
cherokee.conf: vserver!20!rule!500!handler!xsendfile = 1
: (vServer > Behavior > Extensions php > Handler: Allow X-Sendfile [check Enabled] で設定)

Wordpress Network / WPMU 3.3.1 :含まれる直前に以下に
define('WPMU_SENDFILE',true);設定されています。これにより、 WP の wp-includes/ms-files.php:50で実行される次のコードがトリガーされ、特定のブログのファイルが提供されます。wp-config.phpwp-settings.php

header( 'X-Sendfile: ' . $file );
exit;

exit();上記のスニペットが、呼び出しの直前にディスポジション用のヘッダーを追加することで実行されていることを確認しました。その Content-Disposition は上記の curl の結果に存在し、もともと ms-files.php コードにはありません。追加されたコードは次のとおりです。
header('Content-Disposition: inline; filename="'.basename($file).'"');


リサーチ

私は持っている:

  • 構成の変更を行った後、php-fpm / cherokee デーモンを再起動しました。
  • php.net/readfileのコメントでいくつかのトリックを試し、単純なヘッダーをms-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/*
  • [チェロキーのサポート][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正しく機能している場合、または取り除かれている場合、ヘッダーに存在しますか?
  • が機能しているかどうかを判断するためにアクセス ログを使用できますX-Sendfileか?

ここでは、一般的なトラブルシューティングのヒントや情報を探しています。必ずしも PHP / Cherokee に固有のものではありません。

アップデート

テスト環境またはサンドボックス環境で X-Sendfile または X-Accel-Redirect を確認する適切な方法を見つけました: X-Sendfile を無効にして、ヘッダーを確認します。

チェロキーで 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

画像はブラウザーに読み込まれませんが、ヘッダーが存在することがわかります。Allow X-Sendfile を再度有効にすると、イメージが読み込まれ、X-Sendfile が機能していることを確認できます。

4

3 に答える 3

0

github Xのソースによると、Sendfileヘッダーは削除されます。

ファイルを正しくスキミングしている場合、デバッグモードでコンパイルされている場合にのみ成功を記録します。

于 2012-01-04T21:26:43.163 に答える
0

xsendfile の有無にかかわらず、大きなファイルを送信する際のメモリ使用量を確認できます。

于 2012-01-04T23:34:19.027 に答える
0

それらが存在すると、それを使用する理由の1つ、つまり、受信者が提供されているファイルの場所を知らずにファイルが提供されることが妨げられるため、それらは削除されています。

于 2016-10-24T13:51:48.410 に答える