問題タブ [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 - X-Sendfile のダウンロードがいつ完了したかを知る方法はありますか?
Webサーバー上の一時ファイルをクリーンアップするために、X-Sendfileのダウンロードがいつ完了したかを知る方法があるかどうか疑問に思っています.おそらくどこかのログにありますか? 現在の私の理解では、ヘッダーを渡すと、基本的にはそれ自体が独立したものになります。
php - 0B ファイルを提供する Apache2 (PHP) 上の X-SendFile、ただしエラーなし
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 構成で何かが欠けているに違いありません...思い出させてください。 load と .conf ですが、xsendfile には .load しかありませんが、他にもいくつかあるので、それと関係がありますか?
ありがとう。
python - Django-X-Sendfileを理解する
私はDjangoを使用して、アクセス制御を使用したファイルのダウンロードに関する調査を行ってきました。私の目標は、特定のユーザーがアクセスする場合を除いて、ファイルへのアクセスを完全にブロックすることです。Djangoを使用する場合、X-Sendfileはこれを実現するための最適な方法の1つであることを読みました(他のSOの質問などに基づく)。DjangoでX-Sendfileを使用することについての私の基本的な理解は次のとおりです。
- ユーザーがURIを要求して保護されたファイルを取得する
- Djangoアプリは、URLに基づいて返すファイルを決定し、ユーザーの権限などを確認します。
- Djangoアプリは、「X-Sendfile」ヘッダーがサーバーのファイルパスに設定されたHTTP応答を返します
- Webサーバーはファイルを見つけてリクエスターに返します(Webサーバーも途中で「X-Sendfile」ヘッダーを削除すると思います)
Djangoから直接ファイルをチャッキングする場合と比較して、X-Sendfileは保護されたダウンロードを実現するためのより効率的な方法のようです(Djangoと比較してNginxを使用してファイルを提供できるため)が、2つの質問があります。
- X-Sendfileの私の説明は少なくとも抽象的に正しいですか?
- ファイルが保存されているディレクトリへの通常のフロントエンドHTTPアクセス(例:http: //www.example.com/downloads/secret-file.jpg )を提供しないと仮定すると、それは本当に安全ですか(つまり、私の
public_html
ディレクトリに保存しないでください)?または、技術に精通したユーザーがヘッダーなどを調べて、ファイルにアクセスする方法(次に配布する方法)をリバースエンジニアリングすることはできますか? - それは本当にパフォーマンスの大きな違いですか。Djangoから直接150Mbファイルの8bチャンクダウンロードを提供することでアプリケーションサーバーをダウンさせるつもりですか、それともこの種の問題ではありませんか?私が尋ねる理由は、両方のバージョンがほぼ等しい場合、完了したダウンロードの数をログに記録したり、ダウンロードの帯域幅を集計したりするなど、Pythonで処理できるため、Djangoバージョンの方が望ましいからです。
前もって感謝します。
codeigniter - xsendfile はインデックスからのみ機能します
コード イグナイター フレームワーク内で xsendfile を使用して、ユーザーにファイルを送信しようとしています。
すべて正しくインストールされています。私の問題は、すべてのページが index.php から来ているにもかかわらず、ルートからしか機能しないように見えることです。
これは私の機能です:
これを index.php の先頭に配置してルートをロードすると正常に動作しますが、domain.com/controller/function からアクセスしようとすると 404 エラーが返されます。
関数呼び出しを die("test"); に置き換えると、間違いなく index.php ファイルが使用されます。これが画面に表示されます。
xsendfile がファイルにアクセスするために必要なアクセス許可と関係があると思いますが、ルート index.php から動作しているため、完全なアクセス許可があると思っていたでしょう。 .
だから....「domain.com/files/get/12」などのURLから、xsendfileをcodeigniterで動作させる方法について何か提案はありますか?
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
- CentOS
- 私の知る限り、Sendfileモジュールがインストールされています。私は仮想ホスト構成で指定して
XSendFile On
おりXSendFilePath /path/to/app
、ApacheはディレクティブXSendFile
が存在しないことについて文句を言いません。
ありがとう!
2011 年 11 月 6 日更新
この古い更新に基づいてRack::Sendfile
、 が の前に配置されている限りRack::Cache
、X-Sendfile が使用されます。私はそれをしました、そしてこれは私のミドルウェアがどのように見えるかです. ただし、ファイルにはまだ X-Sendfile タグがありません。繰り返しますが、これが X-Sendfile が有効になっているかどうかを判断する確実な方法かどうかわからないので、Passenger キューを調べました。ページにアクセスすると、キューが大幅に妨げられているようです。
2011 年 11 月 7 日更新
これは純粋に Rack::Cache と Rails 3.1 の問題のようです。Rack::Cache は Rack::Sendfile を介した X-Sendfile の使用をサポートしていますが (上で述べたように、Rack::Cache はDisk EntityStoreを使用する場合、それが返すボディは File のサブクラスであるto_path
ため、 Responds_to を使用するため)、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 独自のディスク ストアを使用させるかを決定するために、いくつか質問があります。
- Rack::Cache 独自のストレージ ソリューションが Rails 3.1 で使用されなかった理由は何ですか? なぜ Rails は独自のものを持っているのですか?
- マーシャルが使用される理由はありますか? 代わりにデータのバイトストリームを送り返す必要がある理由はありますか?
いつもより深く入り込んで、ちゃんと理解できたらビックリ。答えが見つかることを願っています!
ruby - Rails3 DEVELOPMENT モードでの send_file の問題
ここで send_file と apache/nginx に関する問題を見てきましたが、すべて production.rb のこの行を指しています。
それはいいが、開発はどうだろう?私は現在開発中で、ブラウザに URL を貼り付けると、0 バイトの zip ファイルが取得されます。
これは、以前は Mac と Windows の両方で完全に機能していたことも注目に値します (両方で 1.8.7 MRI - apache with thin を使用するウィンドウ)。JRuby に切り替えたところ、すべての地獄が解き放たれました。(rvmを使用して)mri gemsetに切り替えても、0バイトのzipファイルを取得できます。
何が問題であり、これをデバッグして解決するにはどうすればよいですか?
php - XSendfile が機能しない - PHP、Apache、Cpanel
サーバーから非常に大きなファイルを提供しているため、XSendfile を使用することを強くお勧めします。サーバーは Cpanel を実行しています。以前は、単純な強制ダウンロード スクリプトを使用していましたが、これも一部のブラウザーではうまく機能しませんでした。XSendfile で一石二鳥を狙う。
OK、ホストはサーバーで Xsendfile を有効にしました。簡単なテスト スクリプトを作成しました。
これを実行すると、ダウンロード プロンプトが表示されます。ただし、送信されるファイルは常に 0kb です。
少し調べてみると、apache 構成ファイルまたは htaccess ファイルでさまざまなことを設定する必要があるようです。また、Apache の設定に追加するのは得策ではないと言われました。そうしないと、更新時に上書きされる可能性があります。私はどちらかというと htaccess でそれを行いたいと思っています。なぜなら、私は apache の設定に直接アクセスすることができず、htaccess でそれを行うことで提供される制御をしたいからです。
もちろん、それを機能させることができれば。
そこで、htaccess ファイルに以下を追加しました。
XSendFile 上の XSendFilePath /home/deli/central XSendFileAllowAbove オン
(スクリプトから中央ファイル ディレクトリへの相対パスは ../../deli/central です)
これらの行を htaccess に追加して public_html ディレクトリ (テスト スクリプトと同じディレクトリ) に配置すると、テスト スクリプトを実行すると 500 エラーが発生します。エラーログを簡単に見ると、次のように表示されます。
/home/north/public_html/.htaccess: ここでは XSendFilePath は許可されていません
私が間違っているかもしれないことについて、誰かが私を啓発してくれますか?
ps - apache config で実行する方がはるかに効率的であるため、サーバーがすべての htaccess ファイルをクロールしてロードする必要がないことを読んだところです。これが本当かどうかはわかりません。
ヘルプは大歓迎です。これはプロジェクトのちょっとしたショーストッパーです:)
ps 言及するのを忘れていました-同じ $file パスを使用して、スクリプトに直接強制ダウンロードを入れると、ファイルは問題なくダウンロードされます。したがって、パスは正しいように見えます。
php - X-Sendfile ヘッダーが機能しているかどうかをテストする
X-Sendfile がスクリプト (PHP) によって Web サーバーに返された要求を適切に処理しているかどうかを確認する方法を探しています。画像は正しく提供されていますが、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: Allow X-Sendfile [check Enabled] で設定)
Wordpress Network / WPMU 3.3.1 :含まれる直前に以下に
define('WPMU_SENDFILE',true);
設定されています。これにより、 WP の wp-includes/ms-files.php:50で実行される次のコードがトリガーされ、特定のブログのファイルが提供されます。wp-config.php
wp-settings.php
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 を許可を無効にした場合:
画像はブラウザーに読み込まれませんが、ヘッダーが存在することがわかります。Allow X-Sendfile を再度有効にすると、イメージが読み込まれ、X-Sendfile が機能していることを確認できます。
php - X-Sendfile 固有の構成 .htaccess に関する質問
私はすでにこれについて質問を開いています。もう一度投稿するためのエチケットはわかりませんが、前の質問が間違った道を進んでいるように感じます.
私は、XSendfile を構成して、Apache サーバーで PHP と連携させるというトピックについて、一日中調査を続けてきました。読めば読むほど、得られる情報は激しく矛盾しています。
したがって、誰かが XSendfile にかなり精通している場合は、この時点であなたの説明が非常に役に立ち、高く評価されます。
ホストは、XSendfile をインストールしたと言います。テスト XSendfile スクリプトを実行しようとすると、エラーは発生せず、0kb ファイルだけが表示されます。だから私は彼らが実際にそれをインストールしたと仮定しています。
次に、ネット上の多くの投稿は、0kb ファイルが構成の問題に起因していることを示唆しています。XSendfile の最近のバージョンでは、次の行が必要なようです。
Apache構成またはhtaccessファイルのいずれかで。これらの行をローカルの htaccess ファイルに入れると、サイト全体が 500 エラーでクラッシュします。それらを一番上か一番下、または 2 行目に配置するパスを選択すると、サイト全体がクラッシュします。
数時間前、私は誰かが作者に話しかけたことを読みました。実際、htaccess で XSendfile を構成することはできず、apache 構成でのみ構成することができます。XSendfile を htaccess で構成することは可能ですか? 半数のサイトが「はい」と答え、半分のサイトが「いいえ」と答えているか、apache config について話しているだけです。
htaccess でそれが可能であれば、サイト全体をクラッシュさせない htaccess の例を誰か教えてもらえますか? 私のhtaccessには現在、次の3行が含まれています。
ストレスを感じているようでしたら申し訳ありませんが、これはこのプロジェクトの締め切りを間近に控えた非常に厄介な問題であり、明確な答えが得られなかったり、適切な情報がどこにも見つからないようです。
php - x-sendfile が開始されたかどうかを確認する方法はありますか?
主題がすべてを物語っていると思います。
ページが読み込まれたときにダウンロードを開始し、スクリプトがダウンロードが開始されたことを確認したら、ページの本文を読み込みます。