1. CLB機能の説明
Tencent Cloud CLBロードバランサは、プロトコルスタックおよびサーバーのハイレベルな最適化により、HTTPSパフォーマンスの大幅な向上を実現しました。またTencentは海外事業者との提携によって証明書にかかるコストを大きく削減しました。Tencent Cloud CLBは次のような点でお客様のビジネスに大きなメリットをもたらします。
1. HTTPSを使用してもClientのアクセス速度を低下させません。
2. クラスター内の単一サーバーのSSL暗号化復号パフォーマンスは6.5W cpsのフルハンドシェイクに達します。これはハイパフォーマンスCPUの少なくとも3.5倍アップに相当します。サーバーのコストを削減することで、業務運営およびトラフィック急増時のサービス機能を大幅に引き上げ、コンピューティング型の攻撃防御機能を増強します。
3. マルチプロトコルのオフロードと変換をサポートし、業務上でクライアントのさまざまなプロトコルに対応するための負荷を減らすことができます。業務バックエンドがHTTP1.1をサポートしていれば、 HTTP2、SPDY、SSL3.0、TLS1.2などの各バージョンのプロトコルを使用できます。
4. SSL証明書の申請、モニタリング、更新をワンストップで行えます。国際的な証明書認証局であるComodo、SecureSiteとの間で協議と提携を行い、証明書申請フローの大幅な短縮とコスト削減を実現しました。
5. CC攻撃防止およびWAF機能を有します。スロー攻撃、高頻度ターゲット攻撃、SQLインジェクション、トロイの木馬などのアプリケーション層攻撃を有効に排除します。
2. HTTP、HTTPSヘッダー識別子
CLBはHTTPSのプロキシとなります。クライアントからのHTTPまたはHTTPSリクエストが、CLBに到達してバックエンドサーバーに転送される時点で、CLBとバックエンドサービスの間のプロトコルにHTTP、HTTPSまたはgRPCを選択することをサポートしています。詳細については、HTTPSリスナーの設定をご参照ください。 CLBとバックエンドサービスの間のプロトコルにHTTPを選択した場合、開発者はフロントエンドのリクエストがHTTPかHTTPSかを識別できない可能性があります。 Tencent Cloud CLBはリクエストをバックエンドサーバーに転送する際、headerにX-Client-Protoを埋め込みます。
X-Client-Proto: http(フロントエンドはHTTPリクエスト)
X-Client-Proto: https(フロントエンドはHTTPSリクエスト)
3. クイック設定
ユーザーがウェブサイトhttps://example.comを設定したいとします。開発者は、ユーザーがブラウザにURLを入力する際、www.example.comを直接入力するだけで、HTTPSプロトコルによってセキュアにアクセスできるようにしたいと考えています。
Cloud Load Balancer(CLB)の操作フローは以下のドキュメントをご参照ください。
ユーザーが入力したwww.example.comリクエストの転送フローは次のようになります。
1. このリクエストはHTTPプロトコルで伝送され、VIPを介してCLBリスナーの80番ポートにアクセスし、バックエンドサーバーの8080番ポートに転送されます。
2. Tencent CloudバックエンドサーバーのNginx上でrewrite操作を設定することで、このリクエストは8080番ポートを経由し、https://example.comページにリライトされます。
3. このとき、ブラウザはhttps://example.comリクエストを対応するHTTPSサイトに再度送信します。このリクエストはVIPを介してCLBリスナーの443番ポートにアクセスし、バックエンドサーバーの80番ポートに転送されます。
この操作はブラウザのユーザーに感知されずに、ユーザーのHTTPリクエストをより安全なHTTPリクエストに書き換えるものです。上記のリクエスト転送操作を実現するために、ユーザーはバックエンドサーバーを次のように設定することができます。
server {
listen 8080;
server_name example.qcloud.com;
location / {
client_max_body_size 200m;
rewrite ^/.(.*) https://$host/$1 redirect;
}
}
もしくはNginxの新バージョンで、推奨される301リダイレクト設定メソッドを用いて、NginxのHTTPページをHTTPSページにリダイレクトします。
server {
listen 80;
server_name example.qcloud.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name example.qcloud.com;
[....]
}