Catégories
Devops

Nginx

Nginx est un serveur web (au même titre qu’Apache) extrêmement rapide lorsqu’il s’agit de servir du contenu statique et qui est souvent utilisé en tant que reverse proxy et load-balancer.
Nginx gagne en popularité du fait de ses performances, facilité de configuration et légèreté (idéal pour docker).

Les bases

Nginx utilise des fichiers de configuration dans /etc/nginx contenant des directives (sortes d’instructions ou bloc d’instructions) dont http, server, location etc.

location est l’une des directives les plus utilisées, chaque virtual host en utilise pour définir comment orienter les requêtes.
Pour effectuer le matching entre une URL et un bloc location, Nginx utilises une certaine syntaxe avec des modificateurs optionnels ( = , ~ , ~* , ^~ )

Sécurisation

En plus d’avoir un système et applications à jour il est possible d’utiliser certaines techniques basiques pour sécuriser notre installation Nginx:

Logging

Il est possible d’exclure certaines requêtes HTTP des logs Nginx avec des directives telles que (dans une section location) :

access_log off;           # pour simplement exclure de l'access_log
log_not_found off;   # pour exclure les 404

Dans une architecture disposant d’un reverse proxy devant le serveur web (tout 2 étant des Nginx), il est possible de logger des informations différentes sur chaque Nginx et au sein de chaque bloc location.

Debugging

  1. tenter d’accéder aux sites définis via un navigateur
  2. utiliser systemctl status nginx pour vérifier que le service tourne bien
  3. vérifier les dates et contenu des fichiers de logs dans /var/log/nginx/
  4. voir si les process écoutant sur les ports (définis dans la conf) sont bien lancés avec les commandes:
sudo lsof -Pn -i 4 -i :80 -i :443|grep -Ei 'listen|established'
sudo netstat -tplan|grep nginx

Erreur WordPress

WordPress en erreur à cause de la réécriture d’en-tetes Nginx: You do not have sufficient permissions to access this page.

En résumé ajouter au wp-config.php (ou équivalent):
if ($_SERVER[‘HTTP_X_FORWARDED_PROTO’] == ‘https’) $_SERVER[‘HTTPS’]=’on’;

Liens

Basics | Server & Location blocs | Basic concepts |

Caching | Setup SSL Reverse Proxy | SSL Termination | FastCGI Proxying | Php & MySql | Forward real IP en Proxy

If is Evil

7 Nginx Rewrite rules

Un outil en ligne de génération des différents fichiers de configuration de Nginx

Un outil de vérification d’URLs pour la conf nginx

Pour sécuriser les flux

Dockerfile officiel

News

nouvelle fonctionnalité de multiplexing SSH/HTTPS/etc/
https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/

MAJ en 1.15 avec le repo Mainline: https://nginx.org/en/linux_packages.html#Ubuntu