Url rewriting avec nginx pour pluxml et phpboost.

J’ai passé un temps fou à comprendre l’url rewriting avec nginx+php-fpm… Mais ça y est je suis rodé !
Le fonctionnement est plutôt simple quand on a compris, je vous recommande de lire la doc nginx, elle est plutôt pas mal, mais les exemples sont pas top… alors quoi de mieux que de proposer les configurations que j’ai réalisé pour comprendre :p

Configuration pluxml :

Configuration phpboost :

Alors c’est sur lui que je me suis cassé les dents… en effet tout les exemples de règles de ré-écritures se finissent soit par .html soit rien, or avec phpboost, l’extension de l’url ré-écrit est .php ! Donc par défaut bah ça va passer dans php-fpm, sans être ré-écrit et donc renvoyer une 404… pas cool, mais j’ai la solution !

Enfin pour débugger le tout si vous avez des soucis, le mode débug est vraiment utile.
Pour l’activer il faut mettre la direction log_rewrite à on et modifier la directive du chemin du log d’erreur en ajoutant debug, exemple : error_log /var/log/monsite.error.log debug.

nginx : Séparer la pile IPv4 et IPv6

Par défaut sous les kernel Linux, contrairement au BSD, la pile IPv4 est encapsulé dans la pile IPv6 si votre service écoute en IPv6, ainsi les adresses IPv4 ressemble à ceci : ::ffff:1.1.1.1.

Et bien sûre ça peut poser quelques soucis … mon serveur se faisait flooder par une personne, voulant le bloquer sans utiliser iptables, j’ai décidé de faire un deny dans la conf nginx puis de reload le service, sauf qu’à cause de cette notation IPv4-to-IPv6, ben ça fonctionne pas !

L’astuce consiste donc à changer le flag système net.ipv6.bindv6only à 1 (avec sysctl) pour séparer les couches IPv4 et IPv6 et à faire écouter nginx sur IPv6 et IPv4 comme ceci :

listen [::]:80 ipv6only=on; # listen for IPv6 only traffic on IPv6 sockets

listen 80; # listen also for IPv4 traffic on “regular” IPv4 sockets

Et voilà le tour est joué ! Et vos logs sont un peu plus lisibles au lieu de ce ::ffff àlacon®