Auf virtuellen Servern der Schicht 7 können Sie optional Load Balancer-Regeln konfigurieren und das Load Balancing-Verhalten unter Verwendung von Übereinstimmungs- oder Aktionsregeln anpassen.

Load Balancer-Regeln unterstützen die Verwendung von regulären Ausdrücken (Regex) für Übereinstimmungstypen. Regex-Muster nach PCRE-Art werden mit einigen Einschränkungen für anspruchsvollere Anwendungsfälle unterstützt. Wenn Regex in Übereinstimmungsbedingungen verwendet wird, werden benannte erfassende Gruppierungskonstrukte unterstützt.

Bezüglich der Verwendung von Regex gelten folgende Einschränkungen:
  • Vereinigungen und Schnittmengen von Zeichenklassen werden nicht unterstützt. Verwenden Sie beispielsweise nicht [a-z[0-9]] und [a-z&&[aeiou]], sondern stattdessen [a-z0-9] bzw. [aeiou].
  • Es werden nur 9 Rückverweise unterstützt, und man kann sie mit Hilfe von \1 bis \9 referenzieren.
  • Verwenden Sie zum Abgleichen von Oktalzeichen das \0dd-Format, nicht das \ddd-Format.
  • Eingebettete Flags werden auf der obersten Ebene nicht unterstützt. Sie können nur innerhalb von Gruppen verwendet werden. Verwenden Sie beispielsweise nicht „Case (?i:s)ensitive“, sondern stattdessen „Case ((?i:s)ensitive)“.
  • Die Vorverarbeitungsoperationen \l, \u, \L und \U werden nicht unterstützt. Dabei steht \l für Kleinschreibung des nächsten Zeichens, \u für Großschreibung des nächsten Zeichens, \L für Kleinschreibung bis \E und \U für Großschreibung bis \E.
  • „(?(condition)X)“, „(?{Code})“, „(??{Code})“ und „(?#comment)“ werden nicht unterstützt.
  • Die vordefinierte Unicode-Zeichenklasse \X wird nicht unterstützt
  • Die Verwendung von benannten Zeichenkonstrukten für Unicode-Zeichen wird nicht unterstützt. Verwenden Sie beispielsweise nicht „\N{name}“, sondern stattdessen „\u2018“.

Wenn Regex in Übereinstimmungsbedingungen verwendet wird, werden benannte erfassende Gruppierungskonstrukte unterstützt. Beispielsweise kann das Regex-Übereinstimmungsmuster „/news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*)“ für den Abgleich mit einem URI wie „/news/2018-06-15/news1234.html“ verwendet werden.

Dann werden die Variablen wie folgt belegt: $year = "2018", $month = "06", $day = "15" und $article = "news1234.html". Nachdem Sie die Variablen festgelegt haben, können diese in Regeln eines Load Balancers verwendet werden. Der URI kann z. B. mithilfe der übereinstimmenden Variablen wie „/news.py?year=$year&month=$month&day=$day&article=$article“ umgeschrieben werden. Dann wird der URI in „/news.py?year=2018&month=06&day=15&article=news1234.html“ umgeschrieben.

Umschreibungsaktionen können eine Kombination von benannten Erfassungsgruppen und integrierten Variablen verwenden. Der URI kann beispielsweise als „/news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr“ geschrieben werden. Der Beispiel-URI wird dann in „/news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1“ umgeschrieben.

Hinweis: Der Name einer benannten Erfassungsgruppe darf nicht mit einem Unterstrich (_) beginnen.
Zusätzlich zu benannten Erfassungsgruppen können die folgenden integrierten Variablen in Umschreibungsaktionen verwendet werden. Alle Namen der integrierten Variablen beginnen mit Unterstrich (_).
  • $_args – Argumente der Anforderung
  • $_arg_<name> - argument <name> in der Anforderungszeile
  • $_cookie_<name> – Wert des <name>-Cookies
  • $ _upstream_cookie_ <name> – Cookie mit dem angegebenen Namen, der vom vorgeschalteten Server im Antwortheader-Feld „Set-Cookie“ gesendet wurde
  • $_upstream_http_<name> – beliebiges Antwortheader-Feld; <name> ist der Feldname konvertiert in Kleinbuchstaben, wobei Bindestriche durch Unterstriche ersetzt wurden
  • $_host – in der folgenden Rangfolge: der Hostname aus der Anforderungszeile oder der Hostname im Anforderungsheader-Feld „Host“ oder der mit einer Anforderung übereinstimmende Servername
  • $_http_<name> – beliebiges Feld des Anforderungsheaders; <name> ist der Name des Felds, konvertiert in Kleinbuchstaben, in dem Bindestriche durch Unterstriche ersetzt wurden.
  • $_https – „on“, wenn die Verbindung im SSL-Modus arbeitet, andernfalls „“
  • $_is_args – „?“, wenn eine Anforderungszeile Argumente enthält, andernfalls „“
  • $_query_string – identisch mit „$_args“
  • $_remote_addr – Client-Adresse
  • $_remote_port – Client-Port
  • $_request_uri – vollständiger ursprünglicher Anforderungs-URI (mit Argumenten)
  • $_scheme – Anforderungsschema, „http“ oder „https“
  • $_server_addr – Adresse des Servers, der eine Anforderung akzeptiert hat
  • $_server_name – Name des Servers, der eine Anforderung akzeptiert hat
  • $_server_port – Port des-Servers, der eine Anforderung akzeptiert hat
  • $_server_protocol – Anforderungsprotokoll, in der Regel „HTTP/1.0“ oder „HTTP/1.1“
  • $_ssl_client_cert – gibt für eine eingerichtete SSL-Verbindung das Client-Zertifikat im PEM-Format zurück, wobei jeder Zeile außer der ersten ein Tabulatorzeichen vorangestellt ist
  • $_ssl_server_name – gibt den über SNI angeforderten Servernamen zurück
  • $_uri – URI-Pfad in der Anforderung
  • $_ssl_ciphers: Gibt die Client-SSL-Verschlüsselungen zurück
  • $_ssl_client_i_dn: Gibt die „Aussteller-DN“-Zeichenfolge des Clientzertifikats für eine eingerichtete SSL-Verbindung gemäß RFC 2253 zurück
  • $_ssl_client_s_dn: Gibt die „Antragsteller-DN“-Zeichenfolge des Clientzertifikats für eine eingerichtete SSL-Verbindung gemäß RFC 2253 zurück
  • $_ssl_protocol: Gibt das Protokoll einer eingerichteten SSL-Verbindung zurück
  • $_ssl_session_reused: Gibt „r“ zurück, wenn eine SSL-Sitzung wiederverwendet wurde, oder andernfalls „.“

Voraussetzungen

Stellen Sie sicher, dass ein virtueller Server der Schicht 7 verfügbar ist. Siehe Konfigurieren von virtuellen Servern von Layer 7 im Manager-Modus.

Prozedur

  1. Öffnen Sie den virtuellen Server der Schicht 7.
  2. Öffnen Sie die Seite „Bezeichner für virtuelle Server“.
  3. Geben Sie die IP-Adresse und Portnummer des virtuellen Servers ein.
    Sie können die Portnummer oder den Portbereich des virtuellen Servers eingeben.
  4. Geben Sie die erweiterten Eigenschaften an.
    Option Beschreibung
    Maximale Anzahl gleichzeitiger Verbindungen Legen Sie die maximale Anzahl gleichzeitiger Verbindungen fest, die für einen virtuellen Server zulässig sind, damit der virtuelle Server nicht die Ressourcen anderer Anwendung verbraucht, die vom selben Load Balancer gehostet werden.
    Maximale Anzahl neuer Verbindungen Legen Sie die maximale Anzahl neuer Verbindungen für ein Serverpoolmitglied fest, damit ein virtueller Server die Ressourcen nicht überlastet.
    Standardport des Poolmitglieds Geben Sie den Standardport eines Poolmitglieds ein, wenn der Port des Poolmitglieds für einen virtuellen Server nicht definiert ist.

    Wenn ein virtueller Server beispielsweise mit dem Portbereich 2000-2999 definiert ist und der Standardportbereich des Poolmitglieds auf 8000-8999 festgelegt ist, wird eine eingehende Clientverbindung für Port 2500 des virtuellen Servers an ein Poolmitglied mit einem auf 8500 gesetzten Zielport gesendet.

  5. (Optional) Wählen Sie im Dropdown-Menü einen vorhandenen Standardserverpool aus.
    Der Serverpool besteht aus einem oder mehreren als Poolmitglieder bezeichneten Servern mit ähnlicher Konfiguration, auf denen dieselbe Anwendung ausgeführt wird.
  6. Klicken Sie auf Hinzufügen, um die Load Balancer-Regel für die Phase „Umschreiben der HTTP-Anfrage“ zu konfigurieren.
    Zu den unterstützten Übereinstimmungstypen gehören REGEX, STARTS_WITH, ENDS_WITH usw. sowie die Inverse-Option.
    Unterstützte Übereinstimmungsbedingung Beschreibung
    HTTP-Anforderungsmethode Zuordnen einer HTTP-Anforderungsmethode.

    http_request.method – zuzuordnender Wert

    HTTP-Anforderungs-URI Zuordnen einer HTTP-Anforderungs-URI ohne Abfrageargumente.

    http_request.uri – zuzuordnender Wert

    Argumente des HTTP-Anforderungs-URI Zuordnen des Abfragearguments eines HTTP-Anforderungs-URI.

    http_request.uri_arguments – zuzuordnender Wert

    HTTP-Anforderungsversion Zuordnen einer HTTP-Anforderungsversion.

    http_request.version – zuzuordnender Wert

    HTTP-Anforderungs-Header Zuordnen eines beliebigen HTTP-Anforderungs-Headers.

    http_request.header_name – zuzuordnender Header-Name

    Http_request.header_value – zuzuordnender Wert

    HTTP-Anforderungsnutzlast Zuordnen des Inhalts eines HTTP-Anforderungstexts.

    http_request.body_value – zuzuordnender Wert

    Felder des TCP-Headers Zuordnen einer TCP-Quelle oder des Zielports.

    Tcp_header.source_port – zuzuordnender Quellport

    tcp_header.destination_port – zuzuordnender Zielport

    Felder des IP-Headers Zuordnen einer IP-Quelladresse oder -Zieladresse

    Ip_header.source_address – zuzuordnende Quelladresse

    ip_header.destination_address – zuzuordnende Zieladresse

    Aktion Beschreibung
    HTTP-Anforderungs-URI umschreiben Ändern eines URI.

    http_request.uri – zu schreibender URI (ohne Abfrageargumente)

    http_request.uri_args – zu schreibende URI-Abfrageargumente

    HTTP-Anforderungs-Header umschreiben Ändern des Werts eines HTTP-Headers.

    Http_request.header_name – Name des Headers

    Http_request.header_value – zu schreibender Wert

  7. Klicken Sie auf Hinzufügen, um die Load Balancer-Regeln für die HTTP-Anforderungsweiterleitung zu konfigurieren.
    Alle Übereinstimmungswerte akzeptieren reguläre Ausdrücke.
    Unterstützte Übereinstimmungsbedingung Beschreibung
    HTTP-Anforderungsmethode Zuordnen einer HTTP-Anforderungsmethode.

    http_request.method – zuzuordnender Wert

    HTTP-Anforderungs-URI Zuordnen eines HTTP-Anforderungs-URI.

    http_request.uri – zuzuordnender Wert

    Argumente des HTTP-Anforderungs-URI Zuordnen des Abfragearguments eines HTTP-Anforderungs-URI.

    http_request.uri_args – zuzuordnender Wert

    HTTP-Anforderungsversion

    Zuordnen einer HTTP-Anforderungsversion.

    http_request.version – zuzuordnender Wert

    HTTP-Anforderungs-Header

    Zuordnen eines beliebigen HTTP-Anforderungs-Headers.

    http_request.header_name – zuzuordnender Header-Name

    Http_request.header_value – zuzuordnender Wert

    HTTP-Anforderungsnutzlast

    Zuordnen des Inhalts eines HTTP-Anforderungstexts.

    http_request.body_value – zuzuordnender Wert

    Felder des TCP-Headers

    Zuordnen einer TCP-Quelle oder des Zielports.

    Tcp_header.source_port – zuzuordnender Quellport

    tcp_header.destination_port – zuzuordnender Zielport

    Felder des IP-Headers

    Zuordnen einer IP-Quelladresse

    Ip_header.source_address – zuzuordnende Quelladresse

    Aktion Beschreibung
    Ablehnen Ablehnen einer Anforderung, beispielsweise durch Setzen des Status auf 5xx.

    http_forward.reply_status – zum Ablehnen verwendeter HTTP-Statuscode

    http_forward.reply_message – HTTP-Ablehnungsnachricht

    Umleiten Umleiten einer Anforderung. Statuscode muss auf 3xx gesetzt werden.

    Http_forward.redirect_status – HTTP-Statuscode für Umleiten

    http_forward.redirect_url – HTTP-Umleitungs-URL

    Pool auswählen

    Erzwingen der Anforderung auf einem bestimmten Serverpool. Der konfigurierte Algorithmus (Prognose) der angegebenen Poolmitglieder wird verwendet, um einen Server im Serverpool auszuwählen.

    Http_forward.select_pool – UUID des Serverpools

  8. Klicken Sie auf Hinzufügen, um die Load Balancer-Regeln für das Umschreiben der HTTP-Antwort zu konfigurieren.
    Alle Übereinstimmungswerte akzeptieren reguläre Ausdrücke.
    Unterstützte Übereinstimmungsbedingung Beschreibung
    HTTP-Antwort-Header Zuordnen eines beliebigen HTTP-Antwort-Headers.

    http_response.header_name – zuzuordnender Header-Name

    Http_response.header_value – zuzuordnender Wert

    Aktion Beschreibung
    HTTP-Antwort-Header umschreiben Ändern des Werts eines HTTP-Antwort-Headers.

    Http_response.header_name – Name des Headers

    Http_response.header_value – zu schreibender Wert

  9. (Optional) Klicken Sie auf Weiter, um Load Balancing-Profile zu konfigurieren.
  10. Klicken Sie auf Fertigstellen.