Ricerca nel sito web

Come utilizzare Nginx come bilanciatore del carico HTTP in Linux


Quando si tratta di configurare più server applicazioni per la ridondanza, il bilanciamento del carico è un meccanismo comunemente utilizzato per distribuire in modo efficiente le richieste di servizio in entrata o il traffico di rete su un gruppo di server back-end.

Il bilanciamento del carico presenta diversi vantaggi, tra cui una maggiore disponibilità delle applicazioni attraverso la ridondanza, una maggiore affidabilità e scalabilità (è possibile aggiungere più server al mix quando il traffico aumenta). Inoltre, garantisce prestazioni migliorate delle applicazioni e molti altri vantaggi.

Lettura consigliata: la guida definitiva per proteggere, rafforzare e migliorare le prestazioni del server Web Nginx

Nginx può essere implementato come un efficiente bilanciatore del carico HTTP per distribuire il traffico di rete in entrata e il carico di lavoro tra un gruppo di server applicativi, restituendo in ogni caso la risposta dal server selezionato al cliente appropriato.

I metodi di bilanciamento del carico supportati da Nginx sono:

  • round-robin: distribuisce le richieste ai server delle applicazioni in modo round-robin. Viene utilizzato per impostazione predefinita quando non è specificato alcun metodo,
  • meno connesso: assegna la richiesta successiva a un server meno occupato (il server con il minor numero di connessioni attive),
  • ip-hash – dove viene utilizzata una funzione hash per determinare quale server deve essere selezionato per la richiesta successiva in base all'indirizzo IP del client. Questo metodo consente la persistenza della sessione (collegare un client a un particolare server delle applicazioni).

Inoltre, puoi utilizzare i pesi del server per influenzare gli algoritmi di bilanciamento del carico Nginx a un livello più avanzato. Nginx supporta anche controlli di integrità per contrassegnare un server come non riuscito (per un periodo di tempo configurabile, il valore predefinito è 10 secondi) se la sua risposta fallisce con un errore, evitando così di sceglierlo server per le successive richieste in entrata per un certo periodo di tempo.

Questa guida pratica mostra come utilizzare Nginx come un bilanciatore del carico HTTP per distribuire le richieste dei client in entrata tra due server aventi ciascuno un'istanza della stessa applicazione.

A scopo di test, ogni istanza dell'applicazione è etichettata (sull'interfaccia utente) per indicare il server su cui è in esecuzione.

Configurazione dell'ambiente di test

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Su ciascun server delle applicazioni, ciascuna istanza dell'applicazione è configurata per l'accesso utilizzando il dominio tecmintapp.lan. Supponendo che si tratti di un dominio completamente registrato, aggiungeremmo quanto segue nelle impostazioni DNS.

A Record   		@   		192.168.58.7

Questo record indica alle richieste del client a cui il dominio deve indirizzarsi, in questo caso, al bilanciatore del carico (192.168.58.7). I record DNS A accettano solo valori IPv4. In alternativa, è possibile utilizzare a scopo di test anche il file /etc/hosts sui computer client, con la seguente voce.

192.168.58.7  	tecmintapp.lan

Configurazione del bilanciamento del carico Nginx in Linux

Prima di configurare il bilanciamento del carico Nginx, devi installare Nginx sul tuo server utilizzando il gestore pacchetti predefinito per la tua distribuzione, come mostrato.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Successivamente, crea un file di blocco del server chiamato /etc/nginx/conf.d/loadbalancer.conf (dai un nome a tua scelta).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Quindi copia e incolla la seguente configurazione al suo interno. Per impostazione predefinita questa configurazione è round robin poiché non è definito alcun metodo di bilanciamento del carico.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Nella configurazione precedente, la direttiva proxy_pass (che dovrebbe essere specificata all'interno di una posizione, / in questo caso) viene utilizzata per passare una richiesta ai server proxy HTTP a cui fa riferimento parola backend, nella direttiva upstream (usata per definire un gruppo di server). Inoltre, le richieste verranno distribuite tra i server utilizzando un meccanismo di bilanciamento round-robin ponderato.

Per utilizzare il meccanismo di connessione minimo, utilizzare la seguente configurazione

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

E per abilitare il meccanismo di persistenza della sessione ip_hash, utilizza:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Puoi anche influenzare la decisione sul bilanciamento del carico utilizzando i pesi del server. Utilizzando la seguente configurazione, se ci sono sei richieste da parte dei client, al server delle applicazioni 192.168.58.5 verranno assegnate 4 richieste e 2 andranno a 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Salvare il file ed uscire. Quindi assicurati che la struttura di configurazione di Nginx sia corretta dopo aver aggiunto le modifiche recenti, eseguendo il comando seguente.

sudo nginx -t

Se la configurazione è OK, riavvia e abilita il servizio Nginx per applicare le modifiche.

sudo systemctl restart nginx
sudo systemctl enable nginx

Test del bilanciamento del carico Nginx in Linux

Per testare il bilanciamento del carico Nginx, apri un browser web e utilizza il seguente indirizzo per navigare.

http://tecmintapp.lan

Una volta caricata l'interfaccia del sito Web, prendi nota dell'istanza dell'applicazione caricata. Quindi aggiorna continuamente la pagina. Ad un certo punto, l'app dovrebbe essere caricata dal secondo server indicando il bilanciamento del carico.

Hai appena imparato come configurare Nginx come bilanciatore del carico HTTP in Linux. Ci piacerebbe conoscere la tua opinione su questa guida, e in particolare sull'utilizzo di Nginx come bilanciatore del carico, tramite il modulo di feedback riportato di seguito. Per ulteriori informazioni, consulta la documentazione di Nginx sull'utilizzo di Nginx come bilanciatore del carico HTTP.