Débuguer sa Config Nginx et ses Regex
Pendant la rédaction de la précédente série d’articles, je dois avouer avoir passé du temps à débuguer ma configuration Nginx. Bien sûr, le premier réflexe est de passer son error_log
en debug. Mais il n’apporte qu’une aide limitée, et il est toujours aussi difficile de savoir quel est le comportement exact de Nginx ou pourquoi cette damnée regex ne fonctionne pas exactement comment il faut.
Rafraîchir sa Maîtrise des Regex
Tester ses regex au hasard sans trop comprendre comment ça marche donne rarement de bon résultats. Ça tombe bien, le site RegexOne propose un excellent tutoriel interactif aussi bien pour apprendre que pour se rafraîchir la mémoire. Un must donc.
Tester et Débuguer ses Regex
Néanmoins, une fois les bases en tête, on finit toujours par bloquer. Est-ce que ma variable prend bien la valeur que j’espère ? Pourquoi est-ce que j’obtiens une erreur 404 ou 502 ? Pas de soucis, Regex101 propose de tester sa regex contre une vraie uri, tout en expliquant ce qui se passe, quelles valeurs prennent les variables etc. En plus, il propose PCRE la même librairie utilisée par Nginx.
Espionner Nginx
Un truc très utile consiste en surveiller les appels système de Nginx avec strace. Pour l’installer sous debian, il suffit de passer la commande apt-get install strace
.
1 2 3 4 5 6 7 | root@ns203445:~# cat /etc/nginx/nginx.conf | grep worker_processes worker_processes 1; root@server:~# ps ax | grep nginx 4998 pts/1 S+ 0:00 grep nginx 15989 ? Ss 0:00 nginx: master process /usr/sbin/nginx 15990 ? S 0:00 nginx: worker process root@server:~# strace -p 15990 2>&1 |
Si vous voyez plusieurs « worker process », il faudra repasser dans le fichier /etc/nginx/nginx.conf
le paramètre worker_processes à 1. Pour voir quels sont les résultats des try_files de nginx, on peut par exemple faire un grep sur « stat »:
1 2 3 4 5 6 7 | root@server:~# strace -p 15990 2>&1 | grep stat stat("/var/www/wp-phil-writesthisblog/wp-contspec/cache/page_enhanced/phil.writesthisblog.comnull cache_index.html", 0x7fff957dab20) = -1 ENOENT (No such file or directory) stat("/var/www/wp-phil-writesthisblog/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat("/var/www/wp-phil-writesthisblog/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat("/var/www/wp-phil-writesthisblog/index.php", {st_mode=S_IFREG|0644, st_size=418, ...}) = 0 stat("/var/www/wp-phil-writesthisblog/index.php", {st_mode=S_IFREG|0644, st_size=418, ...}) = 0 stat("/var/www/wp-phil-writesthisblog/wp-admin/admin.php", {st_mode=S_IFREG|0644, st_size=10277, ...}) = 0 |
Mais pas de Miracle
Rien ne remplacera une bonne et répétée lecture de la documentation officielle pour comprendre les mécanismes de Nginx en détails et produire une configuration qui fonctionne non seulement aujourd’hui mais aussi demain !