複数のサーバーに分割したい既存のアプリケーションがあります(たとえば、合計1000ユーザー、10サーバーに分割された100ユーザー)。
理想的には、URLの一部のコンポーネントに基づいて、HTTPS要求を特定のサーバーに中継できるようにする必要があります。例:ユーザー1から100は http://server1.domain.com/ ユーザー2から200は http://server2.domain.com/ などに移動しますなどなど。
着信リクエストは次のようになります: https://secure.domain.com/user/ {integer user#goes here}/path/to/file
誰かがこれを行う簡単な方法を知っていますか? ポンド 有望に見えます...しかし、このようなURLに基づくルーティングをサポートしているようには見えません。
ハードコーディングする必要がない場合はさらに良いでしょう-ロードバランサーは別のサーバーに別のHTTPリクエストを送信して、「ねえ、URLへのリクエストをどのサーバーに中継する必要があるか{リクエストされたURLここに行く}?」 HTTP応答で返されたホスト名に中継します。
ワニス おそらくそれを行うでしょう。ここで説明した他のオプションと同様に、SSLターミネーターとして機能するには、その前にポンドのようなものが必要です。ただし、完了したら、各実サーバーを「バックエンド」としてセットアップし、次のようなものを構成に追加できます。
##バックエンドサーバーを定義します。 backendserver01 { 。Host = "192.0.2.1"; 。port = "80"; } backend server02 { 。Host = "192.0.2.2"; 。port = "80"; } sub vcl_recv { if(req.url〜 "^/1 [0-9] [0-9] /"){ ##リンクの最初の部分が100-199 use server01 set req.backend = server01; pipe; } else if(req.url〜 "^/2 [0-9] [0-9 ]/"){ ##リンクの最初の部分が200-299の場合は、server02 set req.backend = server02; pipe; }を使用します。 else { ##他のすべてが失敗した場合はserver01 にフォールバックしますsetreq.backend = server01; pipe; } }
これは関連するセクションの抜粋であり、おそらく設定でさらに必要になるでしょう。たとえば、静的ファイルをキャッシュするためにsub vcl_recv {
の直後に次を追加して、変更されないファイルがサーバーに毎回ヒットしないようにすることができます。
if(req.request == "GET" && req.url〜 "\。(png | jpg | gif | css)$"){ lookup;
小さなインラインCプログラムを構成に追加して、外部サービスと通信し、使用するバックエンドを決定することもできます。
利用可能なコーディングリソースはありますか?私はミドルサーバー上の小さなプログラムを使用してこれをほぼ正確に実行しました。 URIからユーザーIDを抽出し、DBルックアップを実行してファイルの場所を見つけ、ファイルをフェッチして、ユーザーに書き戻します。 Javaサーブレットを使用して実行しましたが、同じことを実行するための他のオプションがたくさんあります。
HAProxyはあなたが求めていることを行います。 URLのコンテンツに基づいてレイヤー7ルーティングを実行する機能があり、オープンソースです。