NGINX KeepAlived · 6 min read · Nov 08, 2025
Come configurare NGINX altamente disponibile con KeepAlived su CentOS 8

Nginx è un server web gratuito, open-source e uno dei più popolari al mondo. Può essere utilizzato anche come reverse proxy, bilanciatore di carico e cache HTTP. L’alta disponibilità consente a un’applicazione di reindirizzare il lavoro a un altro sistema in caso di guasto. Ci sono diverse tecnologie disponibili per configurare un sistema altamente disponibile.
Keepalived è un demone di sistema che monitora continuamente i servizi o i sistemi e raggiunge l’alta disponibilità in caso di guasto. Se un nodo è inattivo, il secondo nodo fornisce le risorse.
In questo tutorial, ti mostrerò come configurare un server web Nginx altamente disponibile con KeepAlived su CentOS 8.
Prerequisiti
- Due server che eseguono CentOS 8, uno per il nodo master e uno per il nodo di backup.
- Una password di root configurata sul tuo server.
Installa Nginx su Entrambi i Nodi
Per prima cosa, dovrai installare il pacchetto Nginx su entrambi i nodi. Puoi installarlo utilizzando il seguente comando:
dnf install nginx -yUna volta che Nginx è stato installato su entrambi i nodi, avvia il servizio Nginx e abilitalo per l’avvio al riavvio del sistema:
systemctl start nginx
systemctl enable nginxUna volta terminato, puoi procedere al passaggio successivo.
Crea il File Index.html su Entrambi i Nodi
Successivamente, dovrai creare un file index.html personalizzato su entrambi i nodi per identificare ciascun nodo.
Sul primo nodo, crea un file index.html con il seguente comando:
echo "Questo è il mio primo nodo del server web NGINX
" | tee /usr/share/nginx/html/index.htmlSul secondo nodo, crea un file index.html con il seguente comando:
echo "Questo è il mio secondo nodo del server web NGINX
" | tee /usr/share/nginx/html/index.htmlSalva e chiudi il file quando hai finito.
Installa e Configura Keepalived
Successivamente, dovrai installare Keepalived su entrambi i nodi. Per impostazione predefinita, il pacchetto Keepalived è disponibile nel repository predefinito di CentOS 8. Puoi installarlo eseguendo il seguente comando:
dnf install keepalived -yUna volta che il pacchetto keepalived è installato su entrambi i nodi, dovrai modificare il file di configurazione predefinito di keepalived su entrambi i nodi.
Sul primo nodo, modifica il file keepalived.conf:
nano /etc/keepalived/keepalived.confRimuovi i contenuti predefiniti e aggiungi i seguenti contenuti:
global_defs {
# Identificatore del processo Keepalived
router_id nginx
}
# Script per controllare se Nginx è in esecuzione o meno
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Interfaccia virtuale - La priorità specifica l'ordine in cui l'interfaccia assegnata deve subentrare in caso di failover
vrrp_instance VI_01 {
state MASTER
interface eth0
virtual_router_id 151
priority 110
# L'indirizzo IP virtuale condiviso tra i due server web NGINX che fluttuerà
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
Salva e chiudi il file quando hai finito.
Sul secondo nodo, modifica il file keepalived.conf:
nano /etc/keepalived/keepalived.confRimuovi i contenuti predefiniti e aggiungi i seguenti contenuti:
global_defs {
# Identificatore del processo Keepalived
router_id nginx
}
# Script per controllare se Nginx è in esecuzione o meno
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# Interfaccia virtuale - La priorità specifica l'ordine in cui l'interfaccia assegnata deve subentrare in caso di failover
vrrp_instance VI_01 {
state BACKUP
interface eth0
virtual_router_id 151
priority 100
# L'indirizzo IP virtuale condiviso tra i due server web NGINX che fluttuerà
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
Salva e chiudi il file, quindi dovrai creare uno script per controllare se il servizio Nginx è in esecuzione o meno. Puoi crearlo utilizzando il seguente comando:
Nota: Sostituisci MASTER con BACKUP e 110 con 100 nel file di configurazione sopra.
nano /bin/check_nginx.shAggiungi le seguenti righe:
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
exit 1
fi
Salva e chiudi il file, quindi imposta i permessi corretti con il seguente comando:
chmod 755 /bin/check_nginx.shInfine, avvia il servizio keepalived e abilitalo per l’avvio al riavvio del sistema utilizzando il seguente comando:
systemctl start keepalived
systemctl enable keepalivedPuoi anche controllare lo stato del servizio keepalived utilizzando il seguente comando:
systemctl status keepalivedDovresti ottenere il seguente output:
? keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 3142 (keepalived)
Tasks: 2 (limit: 12524)
Memory: 2.1M
CGroup: /system.slice/keepalived.service
??3142 /usr/sbin/keepalived -D
??3143 /usr/sbin/keepalived -D
Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) Changing effective priority from 110 to 160
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Receive advertisement timeout
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Entering MASTER STATE
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) setting VIPs.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) Sending/queueing gratuitous ARPs on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: Sending gratuitous ARP on eth0 for 192.168.1.10
Puoi anche verificare lo stato dell’indirizzo IP virtuale sul nodo Master utilizzando il seguente comando:
ip add showDovresti vedere l’indirizzo IP virtuale 192.168.1.10 nel seguente output:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
Una volta terminato, puoi procedere al passaggio successivo.
Configura il Firewall su Entrambi i Nodi
Successivamente, dovrai consentire la porta 80 e consentire VRRP su entrambi i nodi. Puoi farlo utilizzando il seguente comando:
firewall-cmd --permanent --add-service=http
firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanentSuccessivamente, ricarica il firewalld per applicare le modifiche:
firewall-cmd –reloadVerifica Keepalived
A questo punto, Nginx e Keepalived sono installati e configurati. È tempo di testare se l’alta disponibilità di Nginx funziona o meno.
Apri il tuo browser web e accedi all’URL http://il-tuo-ip-virtuale. Dovresti vedere la seguente pagina:

Ora, ferma il servizio Nginx sul nodo Master e verifica se l’IP virtuale viene trasferito dal Nodo 1 al Nodo 2.
Sul nodo Master, ferma il servizio Nginx utilizzando il seguente comando:
systemctl stop nginxSuccessivamente, accedi a Node2 e verifica l’IP virtuale utilizzando il seguente comando:
ip add showDovresti vedere il tuo IP virtuale nel seguente output:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
Ora, accedi al tuo server web Nginx utilizzando l’URL http://il-tuo-ip-virtuale. Dovresti vedere la pagina del Nodo2:

Conclusione
Congratulazioni! hai configurato con successo un server Nginx altamente disponibile con Keepalived. Spero che ora tu abbia abbastanza conoscenze per configurare un server Nginx altamente disponibile in un ambiente di produzione.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.