Le espressioni regolari (REGEX) vengono utilizzate in condizioni di corrispondenza per le regole di bilanciamento del carico.

I modelli REGEX di stile PCRE (Perl Compatible Regular Expressions) sono supportati con alcune limitazioni nei casi d'uso avanzati. Quando REGEX viene utilizzato nelle condizioni di corrispondenza, sono supportati i gruppi di acquisizione denominati.

Le limitazioni di REGEX includono:

  • Le unioni e le intersezioni di caratteri non sono supportate. Ad esempio, non utilizzare [a-z[0-9]] e [a-z&&[aeiou]]. Utilizzare invece [a-z0-9] e [aeiou] rispettivamente.
  • Sono supportati solo 9 backreference che possono essere indicati da \1 a \9.
  • Per la corrispondenza dei caratteri ottali, utilizzare il formato \0dd, non il formato \ddd.
  • I contrassegni incorporati non sono supportati al livello superiore, ma solo all'interno dei gruppi. Ad esempio, non utilizzare "Case (?i:s)ensitive". Utilizzare invece "Case ((?i:s)ensitive)".
  • Le operazioni di pre-elaborazione \l, \u, \L, \U non sono supportate. Dove \l indica che il carattere successivo deve essere minuscolo, \u indica che il carattere successivo deve essere maiuscolo, \L indica che i caratteri successivi devono essere minuscoli fino a \E e \U indica che i caratteri successivi devono essere maiuscoli fino a \E.
  • (?(condition)X), (?{code}), (??{Code}) e (?#comment) non sono supportati.
  • La classe di caratteri Unicode predefinita \X non è supportata.
  • L'utilizzo del costrutto di caratteri denominati per i caratteri Unicode non è supportato. Ad esempio, non utilizzare \N{name}. Utilizzare invece \u2018.

    Quando REGEX viene utilizzato nelle condizioni di corrispondenza, sono supportati i gruppi di acquisizione denominati. Ad esempio, il modello di corrispondenza REGEX /news/(?<year>\d+)-(?<month>\d+)-(?<day>\d+)/(?<article>.*) può essere utilizzato per corrispondere a un URI come /news/2018-06-15/news1234.html.

    Le variabili vengono quindi impostate come segue: $year = "2018" $month = "06" $day = "15" $article = "news1234.html". Dopo averle impostate, le variabili possono essere utilizzate nelle azioni delle regole del bilanciamento del carico. Ad esempio, l'URI può essere riscritto utilizzando le variabili corrispondenti come /news.py?year=$year&month=$month&day=$day&article=$article. L'URI viene quindi riscritto come /news.py?year=2018&month=06&day=15&article=news1234.html.

    Le azioni di riscrittura possono utilizzare una combinazione di gruppi di acquisizione denominati e variabili integrate. Ad esempio, l'URI può essere scritto come /news.py?year=$year&month=$month&day=$day&article=$article&user_ip=$_remote_addr. L'URI di esempio viene quindi riscritto come /news.py?year=2018&month=06&day=15&article=news1234.html&user_ip=1.1.1.1.

    Nota: Per i gruppi di acquisizione denominati, il nome non può iniziare con un carattere _.
    Oltre ai gruppi di acquisizione denominati, nelle azioni di riscrittura è possibile utilizzare le seguenti variabili integrate. Tutti i nomi delle variabili integrate iniziano con _.
    • $_args: argomenti della richiesta
    • $_arg_<nome>: <nome> dell'argomento nella riga della richiesta
    • $_cookie_<nome>: valore del cookie <nome>
    • $_upstream_cookie_<nome>: cookie con il nome specificato inviato dal server upstream nel campo dell'intestazione della risposta "Set-Cookie"
    • $_upstream_http_<nome>: campo dell'intestazione della risposta arbitraria e <nome> è il nome del campo convertito in lettere minuscole con i trattini sostituiti da caratteri di sottolineatura
    • $_host: in ordine di precedenza, nome host della riga della richiesta, nome host del campo dell'intestazione della richiesta "Host" oppure nome del server che soddisfa una richiesta
    • $_http_<nome>: campo dell'intestazione della richiesta arbitraria e <nome> è il nome del campo convertito in lettere minuscole con i trattini sostituiti da caratteri di sottolineatura
    • $_https: "on" se la connessione funziona in modalità SSL o "" in caso contrario
    • $_is_args: "?" se una riga della richiesta include argomenti o "" in caso contrario
    • $_query_string: uguale a $_args
    • $_remote_addr: indirizzo del client
    • $_remote_port: porta del client
    • $_request_uri: URI completo della richiesta originale (con argomenti)
    • $_scheme: schema della richiesta, "http" o "https"
    • $_server_addr: indirizzo del server che ha accettato una richiesta
    • $_server_name: nome del server che ha accettato una richiesta
    • $_server_port: porta del server che ha accettato una richiesta
    • $_server_protocol: protocollo della richiesta, in genere "HTTP/1.0" o "HTTP/1.1"
    • $_ssl_client_escaped_cert: restituisce il certificato client in formato PEM per una connessione SSL stabilita.
    • $_ssl_server_name: restituisce il nome del server richiesto tramite SNI
    • $_uri: percorso URI nella richiesta
    • $_ssl_ciphers: restituisce la crittografia SSL del client
    • $_ssl_client_i_dn: restituisce la stringa "DN emittente" del certificato client per una connessione SSL stabilita in base a RFC 2253
    • $_ssl_client_s_dn: restituisce la stringa "DN oggetto" del certificato client per una connessione SSL stabilita in base a RFC 2253
    • $_ssl_protocol: restituisce il protocollo di una connessione SSL stabilita
    • $_ssl_session_reused: restituisce "r" se è stata riutilizzata una sessione SSL oppure "." in caso contrario