私たちを手伝ってくれますか?
sudo echo "1" > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 1.1.1.1
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
私はこれらの iptables ルールを使用して、負荷分散サーバーを作成しています。.mp4 および .mp3 コンテンツを配布しているだけですが、これらのルールは、宛先サーバーの帯域幅ではなく、この転送に使用しているサーバーの帯域幅を使用しています。
これを解決するにはどうすればいいでしょうか? ユーザーはリダイレクト サーバーの代わりに宛先サーバーの帯域幅を使用する必要があります。 ありがとうございます。
答え1
これを解決するにはどうすればいいでしょうか? ユーザーはリダイレクト サーバーの代わりに宛先サーバーの帯域幅を使用する必要があります。 ありがとうございます。
一般的にはいくつかの方法があります:
- ラウンドロビン DNS を使用します。すべてのサーバーは同じ名前を共有しますが、IP は異なります。クライアントはランダムにサーバーを選択します。
- リダイレクトを使用して、ユーザーを適切なサーバーに送信します。
- Anycast を使用します。すべてのサーバーの IP は同じです。ルーティングの仕組みにより、ユーザーは通常、ローカルの IP に接続します。
ラウンドロビン DNS とリダイレクトは、通常、自分で設定できます。エニーキャストの場合は、複数の地域で BGP を自分でアナウンスするか、世界中の複数の ISP と連携する必要があります。
もう 1 つの優れたアイデアは、単に問題を無視し、Cloudflare や Akami などのサービスを前面に配置して、負荷分散を処理させることです。さらに制御したい場合は、Azure や Google Cloud などのクラウド ソリューションでコンテンツをホストすることもできます。その場合、BLOB ストレージからデータを取得する際の負荷についてあまり心配する必要がありません。
ルールが何をするか
ルールに従ってパケットの宛先を書き換え、別のサーバーに送信します。追加あなた彼らを偽装する、これにより、バックエンド サーバーには、パッケージがフロントエンドから送信されたように見えます。バックエンドは義務的に応答し、応答パケットをフロントエンドに送り返します。フロントエンドは、その接続の送信元をテーブルで検索し、パケットを元のクライアントに送信します。サーバー (実際にはルーター) は、パケットを操作してヘッダーを書き換える必要があり、すべてのパケットはそのサーバーを経由する必要があります。
多くの場合、このような設定は非常に理にかなっています。大量のトラフィックをルーティングするのはかなり簡単で、設定も簡単で堅牢です。応答しないサーバーをドロップする高可用性が実現され、ステートフルでない負荷の場合、ルーターがトラフィック量を処理できる限り、容量を増やすのは非常に簡単です。