2

2 つの Apache サーバーをセットアップしました。1 つは公開されており、もう 1 つはファイアウォールの背後にあります。ファイアウォールの背後にあるものは、コンテンツ (ビデオ、写真など) を提供するために使用されます。http://mysite.com/content/へのリクエストが実際にファイアウォール内のサーバーに送られるように、リバース プロキシを設定しました。私のサーバー障害の質問を参照してください。

私のサイトでは、PHP と MySQL を使用してユーザーを認証しています。Apache はすぐに要求を内部サーバーに送信するため、認証は /content ディレクトリ内では機能しません。理想的には、公開サーバーでユーザーを認証し、ファイアウォール内のコンテンツ サーバーからコンテンツを提供したいと考えています。

認証されたユーザーのみに /content ディレクトリへのアクセスを許可する方法はありますか?

4

1 に答える 1

2

この回答は「ベストプラクティス」ではないかもしれませんが、うまく機能します

ユーザーが自分のアカウントにアップロードするプライベート ファイルと画像を提供するために、一種の「ファイル サーバー」として apache を備えたバックエンド サーバーを使用します。仕組みは次のとおりです。

必要に応じて URL を処理するように mod_rewrite をセットアップします。例えば:

RewriteRule /content/(.*)   /ServeContent.php?FileName=$1

スクリプト ServeContent.php は次のことを行います。

1. Validate input

2. Authenticate user based on cookie or session data

3. Make a URL with $_GET['FileName'] and the IP of the backend server
   http://192.168.1.30/content/somefile.jpg

4. Set appropriate headers for the file type
   header('Content-type: image/jpeg')

5. readfile($URL)    

このアプローチでは、PHP で fopen-wrappers が有効になっている必要があります。 readfileコンテンツをメモリに保存しないため、実際にはメモリをあまり使用しません。主な欠点の 1 つは、リクエストの間 (長時間になる可能性があります)、apache/php プロセスを停止することです。しかし現実的には、トラフィックの多いサイトを実行していない限り、おそらく問題はないでしょう。

もしそうなら、そこにはおそらくより良い解決策があります。しかし、これは、さまざまなアプリケーションの大きなファイルに対して非常に効果的に機能しています.

于 2009-10-29T21:16:29.737 に答える