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.
- $_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.