5

「画像サーバー」(画像リクエストを処理するための専用サーバー)を追加し、.gif、.jpg、.png などのすべてのリクエストをリダイレクトすることで、Web サーバーの負荷を軽減しようとしています。

私の質問は、リダイレクトを処理する最良の方法は何ですか?

  • ファイアウォールレベルで?(iptables を使用してこれを実行できますか?)
  • ロードバランサーレベルで?(ldirectord はこれを処理できますか?)
  • Apache レベルで - 書き換えルールを使用していますか?

これを行うための最良の方法についての提案に感謝します。

- アップデート -

追加したいことの 1 つは、これらはサード パーティ向けにホストされているドメインであるため、すべての開発者がコードを変更してイメージを別のサーバーに向けることを期待することはできないということです。

4

2 に答える 2

3

チェーンの上流に行くほど、それはより良いものになります。

理想的には、画像に別のドメインを使用してDNSレベルで実行します(例:imgs.example.com)

余裕があれば、CDN(コンテンツ配信ネットワーク)を使って他の人にやってもらいましょう。

-アップデート-

また、apacheのmod_rewriteには2つの機能があります。それらはすべてhttp://httpd.apache.org/docs/1.3/misc/rewriteguide.htmlで詳しく説明されています。

1つ目は、上記のドキュメントの「Dynamic Miror」という見出しの下にあり、mod_rewriteプロキシフラグ[p]を使用します。これにより、サーバーは別のドメインからファイルをサイレントにフェッチして返すことができます。

2つ目は、リクエストを新しいドメインにリダイレクトすることです。この2番目のオプションはサーバーへの負担を軽減しますが、リクエストは引き続き受信する必要があり、各リクエストは最初にサーバーに対して本質的に冗長なリクエストを行う必要があるため、ページの最終的なレンダリングが遅くなります。

于 2008-12-16T18:18:52.370 に答える
1

私はリクに同意します。画像を別の Web サーバーから提供する場合は、別の Web サーバーで提供します。例えば:

<IMG src="images/Brett.jpg">

になる

<IMG src="http://brettnesbitt.akamia-technologies.com/images/Brett.jpg">

どんな種類のロードバランサーでも、Web サーバーのパイプからイメージをフィードしますが、これは回避しようとしていることです。


もちろん、私はあなたが本当に欲しいものを知っています。あなたが本当に欲しいのは、次のようなリクエストです。

GET images/Brett.jpg HTTP/1.1

自動的に次のように変換されます:

HTTP/1.1 307 Temporary Redirect
Location: http://brettnesbitt.akamia-technologies.com/images/Brett.jpg

この方法では、画像を他の Web サーバーにコピーする以外は何もする必要はありません。

それは私が本当にどうすればいいのかわからないということです。


「NAT」という語句を使用することで、ファイアウォール/ルーターが HTTP 要求を受信し、その HTTP 要求が画像ファイルに対するものであった場合、その要求を別の内部サーバーに転送する必要があることを意味します。

これにより、実際に何を保存しようとしているのかという疑問が生じます。どの内部 Web サーバーが HTTP 要求を処理しても、データは依然としてファイアウォール/ルーターのパイプを通過する必要があります。

私がそれを持ち出す理由は、誰かが別のサーバーから画像を提供したいという一般的なシナリオは、実際のロジックから高帯域幅でほとんど静的で低 CPU コストのコンテンツを分割したいからです。

NAT を使用してパケットを書き換えて別のサーバーに送信するだけでは、その一般的な問題には対応できません。

もう 1 つの理由は、画像がシステム上の静的コンテンツではないためである可能性があります。

GET images/Brett.jpg HTTP/1.1

実際には、CPU コストが高いか、ServerB で利用可能なデータ (SQL Server データベースなど) のみを使用して、オンザフライでイメージを構築します。

この場合、画像リクエストで別のサーバー名を使用します。

GET http://www.brettsoft.com/default.aspx HTTP/1.1
GET http://imageserver.brettsoft.com/images/Brett.jpg HTTP/1.1

NAT ルールを上書きして別のサーバーに送信するネットワーク パケット インスペクションを使用して、あなたが何を望んでいるのか理解しています。

Webプロキシがこれを行う場合、より「プロキシっぽい」ように聞こえます。(つまり、pfSense と m0n0wall では実行できません)

これは、かつて使用した一種のソリューションにつながります。リクエストを分析し、内部サーバーから適切なリクエストを作成し、バイナリがクライアントへのレスポンスを書き込むカスタム Web サーバーです。

お尻の解決策のその痛みは、あいまいさによるセキュリティを明らかに信じている「セキュリティコンサルタント」によって主張されました。

IIS 自体がそのようなことを行うことができないことは知っていますが、他の Web サーバー製品については知りません。


Linux ベースのルーター用のカスタム カーネル モジュールを作成したい場合は、パケットを検査して適切なアクションを実行することができるようです。そのようなモジュールが存在する可能性があります。どうやら、出発点として使用できるオープンソースのモジュールが他にもたくさんあるようです。

でも、自分の頭を撃ちたい。

于 2008-12-16T18:39:44.343 に答える