Ci sono molti modi per attivare la cosiddetta pagina di cortesia di un sito.
Nella maggior parte dei casi che mi è capitato di vedere, l’abitudine è quella di editare il file di configurazione di apache. In questo articolo vi mostro un modo più elegante per farlo.
Aggiungete questa regola nel file httpd.conf:
RewriteCond %{REMOTE_ADDR} !^172\.27\.
RewriteCond %{REMOTE_ADDR} !^172\.16\.8\.102
RewriteCond %{REMOTE_ADDR} !^172\.16\.8\.112
RewriteCond %{REMOTE_ADDR} !^192\.168\.
RewriteCond %{X-Forwarded-For} !^192\.168\.
RewriteCond %{DOCUMENT_ROOT}/maintenance.txt -f
RewriteRule "/(.*)$" "/500.html" [L,NC]
Questo esempio si legge così:
- RewriteCond %{REMOTE_ADDR} !^172.27. - Tutti gli indirizzi che non sono 172.27.. vengono esclusi. Le successive righe sono in AND
- RewriteCond %{DOCUMENT_ROOT}/maintenance.txt -f - … inoltre, se esiste un file nella DOCUMENT_ROOT chiamato maintenance.txt…
- Effettuo la rewrite alla pagina di maintenance (500.html)
Come dicevo, usando questa sintassi non è necessario editare il file di configurazione per mettere in maintenance il sito.
Per creare il file maintenance.txt si può usare uno scrippettino, tipo questo:
#!/bin/bash
# Script for website maintenance mode
# Author: Stefano Teodorani 13 feb 2019
maintenance_file="/tmp/maintenance.txt"
if [ $# == 1 ]; then
if [ $1 != "on" -a $1 != "off" ]; then
echo "ERR: bad parameter"
echo "Usage $(basename $0) [on|off]"
exit
fi
else
if [ -f $maintenance_file ]; then
echo "Maintenance mode is ON"
else
echo "Maintenance mode is OFF"
fi
echo "Usage $(basename $0) [on|off]"
exit
fi
case $1 in
"on")
touch $maintenance_file
echo "Maintenance mode is ON"
;;
"off")
rm -f $maintenance_file
echo "Maintenance mode is OFF"
;;
esac
Se siamo un su un cluster di webserver, il suddetto file deve essere messo su tutti gli host.
Per mettere in maintenance tutti i web server si può usare uno script tipo questo:
#!/bin/bash
# Script for website maintenance mode
# Author: Stefano Teodorani 13 feb 2019
absolute_filename=$(readlink -f $0)
export HOME_DIR=$(dirname $absolute_filename)
$HOME_DIR/maintenance.sh on
if [ $(hostname) = "host-prd-1" ];then
remote_host="host-prd-11"
elif [ $(hostname) = "host-prd-1" ]; then
remote_host="host-prd-11"
fi
if [ ! -z $remote_host ]; then
echo "Execute remote maintenanche script"
ssh root@${remote_host} "/opt/scripts/maintenance.sh on"
fi
echo "Maintenance mode ON for local site $(hostname)"
echo "Maintenance mode ON for remote site $remote_host"
Pianificazione della pagina di cortesia
In linux è possibile effettuare una schedulazione puntuale ed estemporanea con il comando at.
Ora che non è necessario editare il file di configurazione per editare la pagina, possiamo mettere in manutenzione in sito ad un’ora specifica con il seguente comando:
# Metto in maintenance il sito alle ore 22
/opt/scripts/maintenance.sh on >> /tmp/maintenance-status.log | at 22:00
# Tolgo il maintenance dal sito alle ore 09
/opt/scripts/maintenance.sh on >> /tmp/maintenance-status.log | at 09:00
- Puoi vedere la lista dei jobs at con il comando at -l
- Puoi cancellare un job con il comando atrm
(vedi comando precedente)