Nginx Map para mostrar sitios diferentes

Encontré un post sobre cómo setear un nginx server para que te enrute a carpetas diferentes según la ip desde la que accedés a un dominio. O sea, podés mostrar prod a cualquiera y staging a los de la ip de la oficina.

map $remote_addr $root_yoursite{
    default /var/www/prodsite;
    YOUR_IP_ADDRESS /var/beta/stagingsite;
}
Server{
    listen 80;
    root $root_yoursite; # HERE
    server_name yourserver.com www.yourserver.com;
 
    index index.php index.html index;
 
    location /{
        try_files $uri $uri/ /index.php?q=$uri$args;
    }
}

El map cambia una variable en función de ciertas condiciones, en este caso el valor de $root_yoursite para cualquiera es /var/www/ y para los de YOUR_IP_ADDRESS (que podría ser la ip de la oficina) es /var/beta

Nginx Map para hacer redirecciones de sitios viejos

# Old website redirect map
map $uri $new_uri {
    /old.html /index.html;
}
 
server {
    listen 80 default_server;
    listen [::]:80 default_server;
 
    # Old website redirect
    if ($new_uri) {
        rewrite ^ $new_uri permanent;
    }

Si una persona pide old.html que puede ser cualquier dirección que hayamos movido, nginx puede devolverle la nueva en su lugar. $new_uri es una variable que sólo se instancia en el config cuando $uri es igual a /old.html. Aparentemente es uno de los pocos casos donde es aceptable usar if en un conf de nginx

Incluso se puede usar map para bloquear por región geográfica :O


Reference Reference 2