Avec les serveurs virtuels de couche 7, vous pouvez éventuellement configurer des règles d'équilibreur de charge et personnaliser le comportement de l'équilibrage de charge à l'aide de règles de correspondance ou d'action.

Les règles d'équilibreur de charge prennent en charge REGEX pour les types de correspondances. Le modèle REGEX de style PCRE est pris en charge avec quelques limitations pour les cas d'utilisation avancés. Lorsque REGEX est utilisé dans des conditions de correspondance, les groupes de capture nommés sont pris en charge.

Les restrictions REGEX sont les suivantes :
  • Les unions et intersections de caractères ne sont pas prises en charge. Par exemple, n'utilisez pas [a-z [0-9]] et [a-z&&[aeiou]] mais plutôt [a-z0-9] et [aeiou] respectivement.
  • Seules 9 références arrière sont prises en charge et \1 à \9 peuvent être utilisés pour y faire référence.
  • Utilisez le format \0dd pour les correspondances avec les caractères au format octal, et non le format \ddd.
  • Les indicateurs intégrés ne sont pas pris en charge au niveau supérieur, ils sont uniquement pris en charge au sein des groupes. Par exemple, n'utilisez pas « Case (?i:s)ensitive » mais plutôt « Case ((?i:s)ensitive) ».
  • Les opérations de prétraitement \l, \u, \L, \U ne sont pas prises en charge. Où \l - caractère suivant minuscule \u - caractère suivant majuscule \L - minuscule jusqu'à \E \U - majuscule jusqu'à \E.
  • (?(condition)X), (?{code}), (??{Code}) et (?#comment) ne sont pas pris en charge.
  • La classe \X de caractères Unicode prédéfinie n'est pas prise en charge
  • L'utilisation de la construction de caractères nommés n'est pas prise en charge pour les caractères Unicode. Par exemple, n'utilisez pas \N{nom} mais plutôt \u2018.

Lorsque REGEX est utilisé dans des conditions de correspondance, les groupes de capture nommés sont pris en charge. Par exemple, le modèle de correspondance REGEX /news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*) peut être utilisé pour correspondre à un URI tel que /news/2018-06-15/news1234.html.

Les variables sont ensuite définies comme suit, $year = "2018" $month = "06" $day = "15" $article = "news1234.html". Une fois les variables configurées, elles peuvent être utilisées dans les actions de règle d'équilibreur de charge. Par exemple, l'URI peut être réécrit en utilisant des variables mises en correspondance, telles que /news.py?year=$year&month=$month&day=$day&article=$article. Ensuite l'URI est réécrit sous la forme /news.py?year=2018&month=06&day=15&article=news1234.html.

Les actions de réécriture peuvent utiliser une combinaison de groupes de capture nommés et de variables intégrées. Par exemple, l'URI peut être écrit sous la forme /news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr. Ensuite l'exemple d'URI est réécrit sous la forme /news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1.

Note : Pour les groupes de capture nommés, le nom ne peut pas commencer par un caractère _.
En plus des groupes de capture nommés, les variables intégrées suivantes peuvent être utilisées dans les actions de réécriture. Tous les noms de variable intégrés commencent par _.
  • $_args : arguments de la demande
  • $_arg_<nom> : argument <nom> dans la ligne de demande
  • $_cookie_<nom> : valeur du cookie <nom>
  • $_upstream_cookie_<nom> : cookie avec le nom spécifié envoyé par le serveur en amont dans le champ d'en-tête de réponse « Set-Cookie »
  • $_upstream_http_<nom> : champ d'en-tête de demande arbitraire, <nom> étant le nom du champ converti en minuscules dans lequel les tirets sont remplacés par des traits de soulignement
  • $_host - dans l'ordre de priorité - nom d'hôte de la ligne de demande, ou nom d'hôte du champ d'en-tête de demande « Host » ou nom du serveur correspondant à une demande
  • $_http_<nom> : champ d'en-tête de demande arbitraire, <nom> étant le nom du champ converti en minuscules dans lequel les tirets sont remplacés par des traits de soulignement
  • $_https - "on" si la connexion fonctionne en mode SSL, ou "" dans le cas contraire
  • $_is_args - "?" si une ligne de demande dispose d'arguments, ou "" dans le cas contraire
  • $_query_string - identique à $_args
  • $_remote_addr - adresse du client
  • $_remote_port - port du client
  • $_request_uri - URI complet de la demande d'origine (avec les arguments)
  • $_scheme - schéma de demande, "http" ou "https"
  • $_server_addr - adresse du serveur qui a accepté une demande
  • $_nom_serveur - nom du serveur qui a accepté une demande
  • $_server_port - port du serveur qui a accepté une demande
  • $_server_protocol - protocole de la demande, généralement « HTTP/1.0 » ou « HTTP/1.1 »
  • $_ssl_client_cert - renvoie le certificat client au format PEM pour une connexion SSL établie, avec chaque ligne, à l'exception de la première, précédée du caractère de tabulation
  • $_ssl_server_name - renvoie le nom du serveur demandé par le biais de SNI
  • $_uri - chemin d'accès URI dans la demande
  • $_ssl_ciphers : renvoie les chiffrements SSL du client
  • $_ssl_client_i_dn : renvoie la chaîne « issuer DN » du certificat client pour une connexion SSL établie conformément à la norme RFC 2253
  • $_ssl_client_s_dn : renvoie la chaîne « subject DN » du certificat client pour une connexion SSL établie conformément à la norme RFC 2253
  • $_ssl_protocol : renvoie le protocole d'une connexion SSL établie
  • $_ssl_session_reused : renvoie « r » si une session SSL a été réutilisée ou « . » sinon

Conditions préalables

Vérifiez qu'un serveur virtuel de couche 7 est disponible. Reportez-vous à la section Configurer des serveurs virtuels de couche 7 en mode Gestionnaire.

Procédure

  1. Ouvrez le serveur virtuel de couche 7.
  2. Passez à la page Identifiants de serveur virtuel.
  3. Entrez l'adresse IP et le numéro de port du serveur virtuel.
    Vous pouvez entrer le numéro de port ou la plage de ports du serveur virtuel.
  4. Renseignez les détails des propriétés avancées.
    Option Description
    Nombre maximal de connexions simultanées Définissez le nombre maximal de connexions simultanées autorisées sur un serveur virtuel afin que celui-ci n'épuise pas les ressources d'autres applications hébergées sur le même équilibreur de charge.
    Vitesse maximale de nouvelle connexion Définissez la vitesse maximale de nouvelle connexion à un membre du pool de serveurs afin qu'un serveur virtuel n'épuise pas ses ressources.
    Port de membre du pool par défaut Entrez un port de membre du pool par défaut si le port de membre du pool pour un serveur virtuel n'est pas défini.

    Par exemple, si un serveur virtuel est défini avec la plage de ports 2000 - 2999 et que la plage de ports de membre du pool par défaut est définie sur 8000 - 8999, une connexion client entrante sur le port 2500 du serveur virtuel est envoyée à un membre du pool dont le port de destination est défini sur 8500.

  5. (Facultatif) Sélectionnez un pool de serveurs par défaut existant dans le menu déroulant.
    Le pool de serveurs est constitué d'un ou de plusieurs serveurs, appelés membres du pool, qui sont configurés de la même manière et qui exécutent la même application.
  6. Cliquez sur Ajouter pour configurer les règles d'équilibreur de charge pour la phase Réécriture de la demande HTTP.
    Les types de correspondance prises en charge sont REGEX, STARTS_WITH, ENDS_WITH, etc. et l'option inverse.
    Condition de correspondance prise en charge Description
    Méthode de demande HTTP Correspondance à une méthode de demande HTTP.

    http_request.method - valeur à faire correspondre

    URI de demande HTTP Correspondance à l'URI d'une demande HTTP sans arguments de requête.

    http_request.uri - valeur à faire correspondre

    Arguments d'URI de demande HTTP Correspondance à un argument de requête d'URI d'une demande HTTP.

    http_request.uri_arguments - valeur à faire correspondre

    Version de la demande HTTP Correspondance à la version d'une demande HTTP.

    http_request.version - valeur à faire correspondre

    En-tête de demande HTTP Correspondance à n'importe quel en-tête de demande HTTP.

    http_request.header_name - nom d'en-tête à faire correspondre

    http_request.header_value - valeur à faire correspondre

    Charge utile de demande HTTP Correspondance au contenu du corps d'une demande HTTP.

    http_request.body_value - valeur à faire correspondre

    Champs d'en-tête TCP Correspondance au port TCP source ou de destination.

    tcp_header.source_port - port source à faire correspondre

    tcp_header.destination_port - port de destination à faire correspondre

    Champs d'en-tête d'adresse IP Correspondance à une adresse IP source ou de destination.

    ip_header.source_address - adresse source à faire correspondre

    ip_header.destination_address - adresse de destination à faire correspondre

    Action Description
    Réécriture d'URI de demande HTTP Modifier un URI.

    http_request.uri - URI (sans arguments de requête) à écrire

    http_request.uri_args - arguments de requête d'URI à écrire

    Réécriture d'en-tête de demande HTTP Modifier la valeur d'un en-tête HTTP.

    http_request.header_name - nom d'en-tête

    http_request.header_value - valeur à écrire

  7. Cliquez sur Ajouter pour configurer les règles d'équilibreur de charge pour la phase Transfert de la demande HTTP.
    Toutes les valeurs de correspondance acceptent des expressions régulières.
    Condition de correspondance prise en charge Description
    Méthode de demande HTTP Correspondance à une méthode de demande HTTP.

    http_request.method - valeur à faire correspondre

    URI de demande HTTP Correspondance à un URI de demande HTTP.

    http_request.uri - valeur à faire correspondre

    Arguments d'URI de demande HTTP Correspondance à un argument de requête d'URI d'une demande HTTP.

    http_request.uri_args - valeur à faire correspondre

    Version de la demande HTTP

    Correspondance à la version d'une demande HTTP.

    http_request.version - valeur à faire correspondre

    En-tête de demande HTTP

    Correspondance à n'importe quel en-tête de demande HTTP.

    http_request.header_name - nom d'en-tête à faire correspondre

    http_request.header_value - valeur à faire correspondre

    Charge utile de demande HTTP

    Correspondance au contenu du corps d'une demande HTTP.

    http_request.body_value - valeur à faire correspondre

    Champs d'en-tête TCP

    Correspondance au port TCP source ou de destination.

    tcp_header.source_port - port source à faire correspondre

    tcp_header.destination_port - port de destination à faire correspondre

    Champs d'en-tête d'adresse IP

    Correspondance à une adresse IP source.

    ip_header.source_address - adresse source à faire correspondre

    Action Description
    Refuser Refuser une demande, par exemple, en définissant l'état sur 5xx.

    http_forward.reply_status - code d'état HTTP utilisé pour le refus

    http_forward.reply_message - message de refus HTTP

    Rediriger Rediriger une demande. Le code d'état doit être défini sur 3xx.

    http_forward.redirect_status - code d'état HTTP pour la redirection

    http_forward.redirect_url - URL de redirection HTTP

    Sélectionner un pool

    Forcer la demande sur un pool de serveurs spécifique. L'algorithme configuré du membre du pool spécifié (predictor) est utilisé pour sélectionner un serveur dans le pool de serveurs.

    http_forward.select_pool - UUID du pool de serveurs

  8. Cliquez sur Ajouter pour configurer les règles d'équilibreur de charge pour la phase Réécriture de la réponse HTTP.
    Toutes les valeurs de correspondance acceptent des expressions régulières.
    Condition de correspondance prise en charge Description
    En-tête de réponse HTTP Correspondance à n'importe quel en-tête de réponse HTTP.

    http_response.header_name - nom d'en-tête à faire correspondre

    http_response.header_value - valeur à faire correspondre

    Action Description
    Réécriture de l'en-tête de réponse HTTP Modifier la valeur d'un en-tête de réponse HTTP.

    http_response.header_name - nom d'en-tête

    http_response.header_value - valeur à écrire

  9. (Facultatif) Cliquez sur Suivant pour configurer les profils d'équilibrage de charge.
  10. Cliquez sur Terminer.