La directive map Nginx

Accueil Tags Recherche

14 Octobre 2022

La directive map Nginx

À quoi sert la directive map de Nginx, et pourquoi l'utiliser ?

Présentation

La directive map permet de créer des variables, dont les valeurs dépendent d’autres variables.

Dit comme ça ce n’est pas forcément très parlant, prenons cet exemple :

map $a $b {
  default  0;
  foo      1;
  bar      2;
}

Il serait équivalent à ce code en Python :

match a:
  case 'foo':
    b = 1
  case 'bar':
    b = 2
  case _:
    b = 0

Exemples d’utilisation

Vous pouvez par exemple facilement définir un plan de redirection avec la directive map :

http {
  index    index.html;

  map $uri $redirect_uri {
    /nous-contacter.html /contact.html;
    /accueil.html /index.html;
  }

  server {
    listen 80;

    location / {
      if ($redirect_uri) {
        rewrite ^ $redirect_uri permanent;
      }
    }
  }
}

Ou bien encore activer les logs d’accès uniquement pour les accès extérieurs au réseau (ici un réseau au CIDR 10.1.0.0/16). Vous noterez l’utilisation du module geo qui fonctionne exactement comme une map, mais en se basant sur l’adresse IP du client :

http {
  geo $remote_addr $enable_access_log {
    default 1;
    10.1.0.0/16 0;
  }

  server {
    listen          80;

    location / {
      access_log /var/log/access.log combined if=$enable_access_log;
    }
  }
}

Si vous utilisez aussi le module geoip, vous pouvez rapidement mettre en place des restriction d’accès à votre site par pays :

http {
  index    index.html;

  map $geoip_country_code $allowed_country {
    default no;
    FR yes;
    BE yes;
    CH yes;
  }

  server {
    listen 80;

    if ($allowed_country = no) {
      return 444;
    }
  }
}

La variable $geoip_country_code que j’utilise ici fait partie des nombreuses variables disponible avec Nginx, libre à vous d’expérimenter avec elles pour trouver de nouvelles utilisations à cette directive map !

Liens :

Documentation Nginx - Module map
Documentation Nginx - Module geo
Documentation Nginx - Module geoip
Documentation Nginx - Variables variables