Con i server virtuali di livello 7, è possibile configurare facoltativamente regole di bilanciamento del carico e personalizzare il comportamento del bilanciamento del carico utilizzando regole di corrispondenza o di azione.
Le regole di bilanciamento del carico supportano REGEX per i tipi di corrispondenza. I modelli REGEX con stile PCRE 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.
- $_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_cert: restituisce il certificato client in formato PEM per una connessione SSL stabilita, con ogni riga ad eccezione della prima preceduta dal carattere di tabulazione
- $_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
Prerequisiti
Verificare che sia disponibile un server virtuale di livello 7. Vedere Configurazione dei server virtuali di livello 7 in modalità Manager.