正規表現 (REGEX) は、ロード バランサ ルールの一致条件で使用されます。
高度な使用方法ではいくつかの制限がありますが、Perl 互換の正規表現 (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_escaped_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」、それ以外の場合は 「.」を返します