次の要件を解決するにはどうすればよいですか?
nginx サーバーは 3 つあります
X の 1 つは Web サーバーとして使用されます
他の 2 つの添付ファイル サーバーは A と B で、それぞれ異なる添付ファイルが保存されます。
A と B はそれぞれドメイン名
download-a.xxx.com
download- にバインドされています。 b.xxx.com
ユーザーが Web サイトにアクセスした後、ファイル 123.zip をダウンロードする必要がある場合、
ダウンロード リンクは http://bbs.xxx.com/123.zip です (実際のダウンロード アドレスではないことに注意してください)。
しかし、この 123.zip ファイルがサーバー A または B のどちらに配置されているのかわかりません。
実際のダウンロード アドレスは、download-a.xxx.com/123.zip または download-b.xxx である可能性があります。 com /123.zip
にはこのファイルさえ存在しない可能性があります
要件と目的: A と B のエクスポート帯域幅は限られているため、ファイルは別のマシンに配置されますが、A と B の帯域幅とストレージ容量は有効に活用されます (A と B 上のファイルが同じ場合) , ロードバランシングが使用される方法であり、ファイルを繰り返し保存するとAとBのディスクスペースが無駄になります). ファイルがどこにあるかを判断して見つけて、ストレージサーバーがファイルをクライアントに直接送信できるようにしたいと考えています
質問 1:
Web サイトの PHP コードを使用して、ファイルが A または B のどちらのサーバー上にあるかを判断し、ページに実際のアドレスが表示され、顧客がクリックしてファイルを直接ダウンロードした場合、どうすればよいでしょうか。 PHPコードを書けばいいのでしょうか?
質問 2:
上記の方法が実行できない場合、A および B の前で nginx サーバー C を使用してリクエストを処理できますか。これはリバース プロキシの役割に相当します。
例
ユーザーは、ダウンロードするページ上のリソース リンク http://bbs.xxx.com/123.zip をクリックします。http://bbs.xxx.com は、サーバー C にバインドされているドメイン名です。 .C 自体はデータを保存しません。
リクエストを受信した後、C はデータが A または B のどこにあるかを判断します。データが A にある場合、C は直接 A にあなたの場所にあることを伝え、ユーザーを経由せずに直接ファイルを送信するよう A に依頼します。 C. 上記の要件は nginx? 毛織物で実現できますか?
最も重要なことは、ターゲット サーバーがユーザーのブラウザにファイルを直接返すようにすることですが、C のトラフィックと帯域幅を使用せずにこれを実現することは可能ですか?
ファイル名の保存場所を取り消すことができます。たとえば、x 番目のビットを設定すると、A/B サーバーに保存されることを意味します。
ファイル名に基づいて判断してください。