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.

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

Procedura

  1. Aprire il server virtuale di livello 7.
  2. Passare alla pagina Identificatori del server virtuale.
  3. Immettere l'indirizzo IP e il numero di porta del server virtuale.
    È possibile immettere il numero di porta o l'intervallo di porte del server virtuale.
  4. Compilare i dettagli delle proprietà avanzate.
    Opzione Descrizione
    Numero massimo di connessioni simultanee Impostare la quantità massima di connessioni simultanea a un server virtuale in modo che questo non esaurisca le risorse di altre applicazioni ospitate nello stesso bilanciamento del carico.
    Frequenza massima nuova connessione Impostare la velocità massima delle nuove connessioni a un membro del pool di server in modo che un server virtuale non esaurisca le risorse.
    Porta del membro del pool predefinito Immettere una porta del membro del pool predefinita se la porta del membro del pool per un server virtuale non è definita.

    Ad esempio, se un server virtuale viene definito con un intervallo di porte compreso tra 2000 e 2999 e l'intervallo di porte del membro del pool predefinito è impostato su 8000-8999, un membro del pool con una porta di destinazione impostata su 8500 viene inviata una connessione client in entrata sula porta del server virtuale 2500.

  5. (Facoltativo) Selezionare un pool di server predefinito esistente dal menu a discesa.
    Il pool di server è costituito da uno o più server, denominati membri del pool che sono configurati in modo simile ed eseguono la stessa applicazione.
  6. Fare clic su Aggiungi per configurare le regole del bilanciamento del carico per la fase Riscrittura richiesta HTTP.
    I tipi di corrispondenza supportati sono, REGEX, STARTS_WITH, ENDS_WITH e così via e l'opzione inversa.
    Condizione di corrispondenza supportata Descrizione
    Metodo richiesta HTTP Consente di verificare la corrispondenza con un metodo di richiesta HTTP.

    http_request.method: valore con cui verificare la corrispondenza

    URI richiesta HTTP Consente di verificare la corrispondenza con l'URI di una richiesta HTTP senza argomenti della query.

    http_request.uri: valore con cui verificare la corrispondenza

    Argomenti URI richiesta HTTP Consente di verificare la corrispondenza con un argomento della query dell'URI della richiesta HTTP.

    http_request.uri_arguments: valore con cui verificare la corrispondenza

    Versione richiesta HTTP Consente di verificare la corrispondenza con la versione di una richiesta HTTP.

    http_request.version: valore con cui verificare la corrispondenza

    Intestazione richiesta HTTP Consente di verificare la corrispondenza con un'intestazione qualsiasi della richiesta HTTP.

    http_request.header_name: nome dell'intestazione con cui verificare la corrispondenza

    http_request.header_value: valore con cui verificare la corrispondenza

    Payload richiesta HTTP Consente di verificare la corrispondenza con il contenuto del corpo di una richiesta HTTP.

    http_request.body_value: valore con cui verificare la corrispondenza

    Campi intestazione TCP Consente di verificare la corrispondenza con una porta di origine o di destinazione TCP.

    tcp_header.source_port: porta di origine con cui verificare la corrispondenza

    tcp_header.destination_port: porta di destinazione con cui verificare la corrispondenza

    Campi intestazione IP Consente di verificare la corrispondenza con un indirizzo IP di origine o di destinazione IP.

    ip_header.source_address: indirizzo di origine con cui verificare la corrispondenza

    ip_header.destination_address: indirizzo di destinazione con cui verificare la corrispondenza

    Azione Descrizione
    Riscrittura URI richiesta HTTP Consente di modificare un URI.

    http_request.uri: URI (senza argomenti della query) da scrivere

    http_request.uri_args: argomenti della query URI da scrivere

    Riscrittura intestazione richiesta HTTP Consente di modificare il valore di un'intestazione HTTP.

    http_request.header_name: nome dell'intestazione

    http_request.header_value: valore da scrivere

  7. Fare clic su Aggiungi per configurare le regole del bilanciamento del carico per l'inoltro della richiesta HTTP.
    Tutti i valori di corrispondenza accettano espressioni regolari.
    Condizione di corrispondenza supportata Descrizione
    Metodo richiesta HTTP Consente di verificare la corrispondenza con un metodo di richiesta HTTP.

    http_request.method: valore con cui verificare la corrispondenza

    URI richiesta HTTP Consente di verificare la corrispondenza con l'URI di una richiesta HTTP.

    http_request.uri: valore con cui verificare la corrispondenza

    Argomenti URI richiesta HTTP Consente di verificare la corrispondenza con un argomento della query dell'URI della richiesta HTTP.

    http_request.uri_args: valore con cui verificare la corrispondenza

    Versione richiesta HTTP

    Consente di verificare la corrispondenza con la versione di una richiesta HTTP.

    http_request.version: valore con cui verificare la corrispondenza

    Intestazione richiesta HTTP

    Consente di verificare la corrispondenza con un'intestazione qualsiasi della richiesta HTTP.

    http_request.header_name: nome dell'intestazione con cui verificare la corrispondenza

    http_request.header_value: valore con cui verificare la corrispondenza

    Payload richiesta HTTP

    Consente di verificare la corrispondenza con il contenuto del corpo di una richiesta HTTP.

    http_request.body_value: valore con cui verificare la corrispondenza

    Campi intestazione TCP

    Consente di verificare la corrispondenza con una porta di origine o di destinazione TCP.

    tcp_header.source_port: porta di origine con cui verificare la corrispondenza

    tcp_header.destination_port: porta di destinazione con cui verificare la corrispondenza

    Campi intestazione IP

    Consente di verificare la corrispondenza con un indirizzo IP di origine.

    ip_header.source_address: indirizzo di origine con cui verificare la corrispondenza

    Azione Descrizione
    Rifiuta Consente di rifiutare una richiesta, ad esempio impostando lo stato su 5xx.

    http_forward.reply_status: codice dello stato HTTP utilizzato per il rifiuto

    http_forward.reply_message: messaggio di rifiuto HTTP

    Reindirizza Consente di reindirizzare una richiesta. Il codice dello stato deve essere impostato su 3xx.

    http_forward.redirect_status: codice dello stato HTTP per il reindirizzamento

    http_forward.redirect_url: URL di reindirizzamento HTTP

    Seleziona pool

    Consente di forzare la richiesta a un pool di server specifico. L'algoritmo configurato del membro del pool specificato (predictor) viene utilizzato per selezionare un server nel pool di server.

    http_forward.select_pool: UUID del pool di server

  8. Fare clic su Aggiungi per configurare le regole del bilanciamento del carico per la riscrittura della risposta HTTP.
    Tutti i valori di corrispondenza accettano espressioni regolari.
    Condizione di corrispondenza supportata Descrizione
    Intestazione risposta HTTP Consente di verificare la corrispondenza con un'intestazione qualsiasi della risposta HTTP.

    http_response.header_name: nome dell'intestazione con cui verificare la corrispondenza

    http_response.header_value: valore con cui verificare la corrispondenza

    Azione Descrizione
    Riscrittura intestazione risposta HTTP Consente di modificare il valore dell'intestazione di una risposta HTTP.

    http_response.header_name: nome dell'intestazione

    http_response.header_value: valore da scrivere

  9. (Facoltativo) Fare clic su Avanti per configurare i profili del bilanciamento del carico.
  10. Fare clic su Fine.