レイヤー 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 仮想サーバの構成 を参照してください。