14/08/2008
Fail-over: pourquoi faire ?
Je devais depuis longtemps installer nginx, afin de mettre à disposition quelques lignes de code. Histoire de corser la chose, pourquoi ne pas utiliser la deuxième @IP de mon dédié ? Je suis bien conscient que le but premier d'une adresse fail-over n'est pas de réserver une adresse pour un service particulier mais il faut bien s'amuser :)
Comment faire ?
On commence par activer l'adresse fail-over dans la console de management. Une fois le courriel de confirmation reçu, je crée une jail:
ks# ./bin/mk_jail.sh donwload 10240M dowload.bsdsx.fr 172.16.0.4
J'installe nginx:
compil# cd /usr/port/www/nginx
compil# make package
compil# pkg_delete nginx-0.6.32
[ copie de nginx-0.6.32.tbz depuis compil vers download ]
download$ sudo pkg_add nginx-0.6.32.tbz
La configuration se limite à l'emplacement des fichiers de logs et du document root.
On lance le serveur:
download$ sudo /usr/local/etc/rc.d/nginx start
On n'oublie pas la rotation des logs:
download$ grep nginx /etc/newsyslog.conf
/var/log/nginx/*.log 640 10 5000 $W6D0 JG /var/run/nginx.pid
Et le démarrage au boot:
download# echo 'nginx_enable="YES"' >> /etc/rc.conf
Reste la configuration du pf de l'hôte (extraits):
failover="adresse.ip.du.failover"
nat on $ext_if from 172.16.0.4 -> $failover
rdr pass on $ext_if proto tcp from <ssh_ok> to $failover port ssh -> 172.16.0.4 port ssh
rdr pass on $ext_if proto tcp to $failover port http -> 172.16.0.4 port http
Et c'est tout ?
Ben oui. Ce serveur web proposant (pour l'instant j'espère :) très peu de chose, je ne me suis pas soucié des logs. Grave erreur:
download$ grep -c w00t /var/log/nginx/access.log
267
download$ grep -c php /var/log/nginx/access.log
455
Aux grands maux, les grands remèdes:
download$ grep -A 2 'location.*php' /usr/local/etc/nginx/nginx.conf
location ~ \.php {
deny all;
}
Et depuis l'hôte:
ks# awk '{ print $11 }' /zfs/jail/download/var/log/nginx/error.log | sort -u | tr -d ',' >> /etc/spammers
Avec une règle pf kivabien:
ks# grep spammers /etc/pf.conf
table <spammers> persist file "/etc/spammers"
block quick from <spammers>
Et un script qui met à jour /etc/spammers:
[ snip alimentation /etc/spammers ]
/sbin/pfctl -q -t spammers -T replace -f /etc/spammers
Et oui, fail2ban c'est bien, mais sous freebsd c'est demerdeune ziziche :)
Update:
Merci à dug pour la (double :) correction de la ligne de newsyslog.conf
Pages :
Rss