レイヤー 7 仮想サーバでは、ロード バランサ ルールを構成し、一致またはアクションのルールを使用してロード バランシングの動作をカスタマイズすることもできます。

ロード バランサのルールは、一致のタイプとして正規表現をサポートします。高度な使用方法ではいくつかの制限がありますが、PCRE スタイルの正規表現パターンがサポートされています。一致条件に正規表現を使用する場合、名前付きキャプチャ グループがサポートされます。

正規表現には以下の制限事項があります。
  • 文字を和集合および共通部分で表現することはサポートされません。たとえば、[a-z[0-9]] および [a-z&&[aeiou]] と表現せず、それぞれ [a-z0-9] および [aeiou] と表現します。
  • 後方参照は 9 までサポートされ、\1 ~ \9 を使用して参照できます。
  • 8 進数に一致させるには、\ddd 形式ではなく \0dd 形式を使用します。
  • 最上位のレベルでは組み込みフラグはサポートされません。グループ内でのみサポートされます。たとえば、「Case (?i:s)ensitive」は使用せずに、「Case ((?i:s)ensitive)」を使用します。
  • 前処理演算子 \l、\u、\L、\U はサポートされません。ここで、\l は次の文字を小文字にする演算子、\u は次の文字を大文字にする演算子、\L は \E までの文字を小文字にする演算子、\U は \E までの文字を大文字にする演算子です。
  • (?(condition)X)、(? {code})、(??{Code}) および (?#comment) はサポートされません。
  • 事前定義済みの Unicode 文字クラス \X はサポートされません。
  • Unicode 文字の名前付き構文を使用した参照はサポートされません。たとえば、\N{name} は使用せずに \u2018 を使用します。

一致条件に正規表現を使用する場合、名前付きキャプチャ グループがサポートされます。たとえば、正規表現による一致パターン「/news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*)」は、「/news/2018-06-15/news1234.html」のような URI との一致に使用されます。

ここで変数を以下のように設定します:$year = "2018" $month = "06" $day = "15" $article = "news1234.html"。設定後の変数は、ロード バランサ ルールのアクションで使用できます。たとえば、URI は一致する変数を使用して「/news.py?year=$year&month=$month&day=$day&article=$article」のように書き換えることができます。したがって URI は「/news.py?year=2018&month=06&day=15&article=news1234.html」と書き換えられます。

書き換えアクションにより、名前付きキャプチャ グループと組み込みの変数を組み合わせて使用できます。たとえば、URI は「/news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr」と記述できます。したがって例の URI は「/news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1」と書き換えられます。

注: 名前付きキャプチャ グループの名前は、「_」文字で開始できません。
名前付きキャプチャ グループのほか、書き換えアクションでは次の組み込みの変数も使用できます。組み込みの変数の名前はすべて「_」で始まります。
  • $ _args:要求からの引数
  • $_arg_<name>:要求行の <name> 引数
  • $_cookie_<name>:<name> Cookie の値
  • $_upstream_cookie_<name>:アップストリーム サーバによって送信された Cookie。Set-Cookie 応答ヘッダー フィールドに名前が指定されます。
  • $_upstream_http_<name>:任意の応答ヘッダー フィールドで、<name> は小文字に変換され、ダッシュをアンダースコアで置き換えたフィールド名
  • $_host:優先順位で、要求行からのホスト名、「Host」要求のヘッダーフィールドからのホスト名、または要求に一致するサーバ名
  • $_http_<name>:任意の要求のヘッダー フィールドで、<name> は小文字に変換され、ダッシュをアンダースコアで置き換えたフィールド名
  • $_https:接続が SSL モードで機能している場合は "on"、それ以外の場合は ""
  • $_is_args:要求行に引数がある場合は "?"それ以外の場合は ""
  • $ _query_string:$_args と同じ
  • $ _remote_addr:クライアント アドレス
  • $ _remote_port:クライアント ポート
  • $ _request_uri:元の完全な要求 URI(引数を含む)
  • $ _scheme:要求のスキーム、"http" または "https"
  • $ _server_addr:要求を承認したサーバのアドレス
  • $ _server_name:要求を承認したサーバの名前
  • $ _server_port:要求を承認したサーバのポート
  • $_server_protocol:申請プロトコル、通常、"HTTP/1.0" または "HTTP/1.1"
  • $_ssl_client_cert:確立された SSL 接続に対し、クライアント証明書を最初の行以外の各行で先頭にタブ文字を追加した PEM 形式で返します
  • $_ssl_server_name:SNI で要求されたサーバ名を返します
  • $ _uri:要求内の URI パス
  • $_ssl_ciphers:クライアントの SSL 暗号を返します
  • $_ssl_client_i_dn:RFC 2253 に従って確立された SSL 接続のクライアント証明書の issuer DN 文字列を返します
  • $_ssl_client_s_dn:RFC 2253 に従って確立された SSL 接続のクライアント証明書の subject DN 文字列を返します
  • $_ssl_protocol:確立された SSL 接続のプロトコルを返します
  • $_ssl_session_reused:SSL セッションが再利用された場合は 「r」、それ以外の場合は 「.」を返します

前提条件

レイヤー 7 仮想サーバが使用できることを確認します。マネージャ モードでのレイヤー 7 仮想サーバの構成 を参照してください。

手順

  1. レイヤー 7 仮想サーバを開きます。
  2. [仮想サーバの識別子] ページに移動します。
  3. 仮想サーバの IP アドレスとポート番号を入力します。
    仮想サーバのポート番号またはポートの範囲を入力できます。
  4. 詳細プロパティの詳細を入力します。
    オプション 説明
    最大同時接続数 同じロード バランサでホストされている他のアプリケーションのリソースをすべて消費することがないように、仮想サーバに許される同時接続の最大数を設定します。
    最大新規接続レート 仮想サーバがリソースをすべて消費することがないように、サーバ プール メンバーに対して新規接続の最大速度を設定します。
    デフォルトのプール メンバー ポート 仮想サーバのプール メンバー ポートが定義されていない場合は、デフォルトのプール メンバー ポートを入力します。

    たとえば、仮想サーバに 2000~2999 のポート範囲を定義し、デフォルトのプール メンバー ポート範囲を 8000~8999 と設定した場合、仮想サーバのポート 2500 への受信クライアント接続は、ターゲット ポートが 8500 に設定された状態でプール メンバーに送信されます。

  5. (オプション) ドロップダウン メニューから既存のデフォルト サーバ プールを選択します。
    サーバ プールは、プール メンバーと呼ばれる 1 台または複数のサーバで構成されます。これらは同じように設定され、同じアプリケーションを実行します。
  6. [追加] をクリックして、HTTP 要求の書き換えフェーズにロード バランサ ルールを構成します。
    サポートされている一致のタイプは、REGEX、STARTS_WITH、ENDS_WITH などと、反転オプションです。
    サポートされている一致条件 説明
    HTTP 要求メソッド HTTP 要求メソッドに一致します。

    http_request.method:一致する値

    HTTP 要求 URI クエリの引数を除いて、HTTP 要求 URI と一致します。

    http_request.uri:一致する値

    HTTP 要求の URI 引数 HTTP 要求の URI クエリ引数と一致します。

    http_request.uri_arguments:一致する値

    HTTP 要求バージョン HTTP 要求のバージョンと一致します。

    http_request.version:一致する値

    HTTP 要求ヘッダー 任意の HTTP 要求ヘッダーと一致します。

    http_request.header_name:一致するヘッダー名

    http_request.header_value:一致する値

    HTTP 要求ペイロード HTTP 要求の本文の内容に一致します。

    http_request.body_value:一致する値

    TCP ヘッダー フィールド TCP の送信元ポートまたは宛先ポートと一致します。

    tcp_header.source_port:一致する送信元ポート

    tcp_header.destination_port:一致する宛先ポート

    IP ヘッダー フィールド 送信元またはターゲットの IP アドレスに一致します。

    ip_header.source_address:一致する送信元の IP アドレス

    ip_header.destination_address:一致する宛先の IP アドレス

    アクション 説明
    HTTP 要求 URI の書き換え URI を変更します。

    http_request.uri:書き込む URI(クエリ引数なし)

    http_request.uri_args:書き込む URI クエリ引数

    HTTP 要求ヘッダーの書き換え HTTP ヘッダーの値を変更します。

    http_request.header_name:ヘッダー名

    http_request.header_value:書き込む値

  7. [追加] をクリックして、HTTP 要求の転送にロード バランサ ルールを構成します。
    一致するすべての値には、正規表現を使用できます。
    サポートされている一致条件 説明
    HTTP 要求メソッド HTTP 要求メソッドに一致します。

    http_request.method:一致する値

    HTTP 要求 URI HTTP 要求 URI と一致します。

    http_request.uri:一致する値

    HTTP 要求の URI 引数 HTTP 要求の URI クエリ引数と一致します。

    http_request.uri_args:一致する値

    HTTP 要求バージョン

    HTTP 要求のバージョンと一致します。

    http_request.version:一致する値

    HTTP 要求ヘッダー

    任意の HTTP 要求ヘッダーと一致します。

    http_request.header_name:一致するヘッダー名

    http_request.header_value:一致する値

    HTTP 要求ペイロード

    HTTP 要求の本文の内容に一致します。

    http_request.body_value:一致する値

    TCP ヘッダー フィールド

    TCP の送信元ポートまたは宛先ポートと一致します。

    tcp_header.source_port:一致する送信元ポート

    tcp_header.destination_port:一致する宛先ポート

    IP ヘッダー フィールド

    送信元の IP アドレスと一致します。

    ip_header.source_address:一致する送信元の IP アドレス

    アクション 説明
    却下 たとえば、状態を 5xx に設定することによって要求を却下します。

    http_forward.reply_status - 却下するために使用する HTTP 状態コード

    http_forward.reply_message - HTTP 却下メッセージ

    リダイレクト 要求をリダイレクトします。状態コードは、3xx に設定する必要があります。

    http_forward.redirect_status:リダイレクトの HTTP 状態コード

    http_forward.redirect_url:HTTP リダイレクト URL

    プールの選択

    要求に特定のサーバ プールを適用します。指定されたプール メンバーの構成済みアルゴリズム(予測)を使用して、サーバ プール内のサーバを選択します。

    http_forward.select_pool:サーバ プールの UUID

  8. [追加] をクリックして、HTTP 応答の書き換えにロード バランサ ルールを構成します。
    一致するすべての値には、正規表現を使用できます。
    サポートされている一致条件 説明
    HTTP 応答ヘッダー 任意の HTTP 応答ヘッダーに一致します。

    http_response.header_name:一致するヘッダー名

    http_response.header_value:一致する値

    アクション 説明
    HTTP 応答ヘッダーの書き換え HTTP 応答ヘッダーの値を変更します。

    http_response.header_name:ヘッダー名

    http_response.header_value:書き込む値

  9. (オプション) [次へ] をクリックして、ロード バランシング プロファイルを構成します。
  10. [終了] をクリックします。