Learning Center
Servidor web Nginx

Ejemplos de la directiva location en Nginx

9 feb 2026
Adnene Mabrouk
Adnene Mabrouk

La directiva location de Nginx es una herramienta potente para controlar cómo se procesan distintos tipos de solicitudes. Al definir reglas en bloques location, puedes aplicar configuraciones específicas, redirigir el tráfico a diferentes partes de tu aplicación o incluso bloquear completamente ciertas solicitudes. El uso correcto de esta directiva permite una gestión eficiente de las peticiones, lo cual es clave para mejorar el rendimiento, la seguridad y la funcionalidad de las aplicaciones web.

Sintaxis básica de la directiva location
Copiar enlace

La directiva location se define en el archivo de configuración nginx.conf:

location [modifier] uri { ... }

  • modifier: parámetro opcional que define el tipo de coincidencia (exacta, prefijo, expresión regular, etc.)

  • uri: la URI que se debe comparar

Dentro de las llaves puedes definir distintas directivas como proxy_pass, root o index.

Ejemplo de coincidencia exacta
Copiar enlace

Una coincidencia exacta ocurre cuando la cadena proporcionada coincide exactamente con la URI solicitada.

location = /exact-match {

    root /var/www/html;

    index index.html;

}

Solo las solicitudes a /exact-match serán procesadas por este bloque.

También puedes añadir condiciones usando if (ten en cuenta que Nginx no tiene un if-else tradicional):

location = /exact-match {

    root /var/www/html;

    index index.html;

    if ($http_user_agent ~* "Chrome") {

        add_header X-Browser "Chrome";

    }

}

Si el agente de usuario es Chrome, la respuesta incluirá el encabezado adicional X-Browser.

Ejemplo de coincidencia por prefijo
Copiar enlace

Es el tipo más común y coincide con cualquier URI que comience con la cadena especificada.

location /prefix {

    root /var/www/html;

    index index.html;

    if ($request_method = POST) {

        return 405;

    }

}

Este bloque gestiona solicitudes como /prefix/page1 o /prefix/page2. Si el método es POST, Nginx devuelve 405 Method Not Allowed.

Ejemplo con expresiones regulares
Copiar enlace

Para escenarios más complejos, puedes usar expresiones regulares.

Comodines comunes:

  • . – coincide con un carácter

  • .* – coincide con cualquier secuencia

  • ^ – inicio de cadena

  • $ – final de cadena

location ~* \.php$ {

    fastcgi_pass 127.0.0.1:9000;

    fastcgi_index index.php;

    include fastcgi_params;

    if ($request_uri ~* "/admin") {

        return 403;

    }

    if ($request_uri !~* "/admin") {

        add_header X-Admin "Not Admin";

    }

}

Explicación:

  • ~* indica coincidencia sin distinguir mayúsculas

  • \.php$ coincide con archivos PHP

  • si la URI contiene /admin → 403 Forbidden

  • si no, se añade X-Admin: Not Admin

Coincidencia sin distinguir mayúsculas
Copiar enlace

location ~* \.jpg$ {

    root /var/www/images;

    if ($http_referer !~* "^https?://(www\.)?example\.com") {

        return 403;

    }

}

Coincide con .jpg, .JPG, etc., y solo sirve imágenes si el referer proviene de example.com.

Prioridad y orden
Copiar enlace

Nginx evalúa los bloques así:

  1. Exacto (=) – máxima prioridad

  2. Expresiones regulares (~, ~*) – en orden de aparición

  3. Prefijos (/) – el prefijo más largo gana

Ejemplo:

location = /exact { }

location ~* \.jpg$ { }

location / { }

Bloques location anidados
Copiar enlace

location /nested {

    location /nested/subnested {

        root /var/www/html;

    }

    root /var/www/html;

}

Las solicitudes a /nested/subnested usan el bloque interno.

Ejemplo real de servidor web
Copiar enlace

server {

listen 80;

server_name localhost;

location / {

root /var/www/html;

index index.html;

}

location = /about {

root /var/www/html;

index about.html;

}

location /api {

proxy_pass http://localhost:3000;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

}

location ~ \.php$ {

root /var/www/html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi_params;

}

location ~* \.(jpg|jpeg|png|gif|ico)$ {

root /var/www/images;

}

location /admin {

root /var/www/admin;

index index.html;

location /admin/stats {

proxy_pass http://localhost:8080/stats;

}

}

}

Recargar Nginx
Copiar enlace

sudo systemctl reload nginx

Pruebas y depuración
Copiar enlace

Validar configuración:

sudo nginx -t

Probar rutas:

curl -I http://localhost/about

curl -X POST http://localhost/prefix/form

curl -H "User-Agent: Chrome" http://localhost/exact-match

Ver logs:

tail -f /var/log/nginx/access.log

tail -f /var/log/nginx/error.log

Restricción de acceso a rutas sensibles
Copiar enlace

location /admin {

    allow 192.168.1.100;

    deny all;

}

Solo esa IP puede acceder.

root vs alias
Copiar enlace

Directiva

Comportamiento

root

añade la URI

alias

reemplaza el prefijo

Ejemplo con alias:

location /files/ {

    alias /data/downloads/;

}

Nota: siempre termina alias con /.

Conclusión
Copiar enlace

Comprender la directiva location es esencial para un manejo preciso de las solicitudes. Las coincidencias exactas, por prefijo y por regex tienen diferentes prioridades y afectan directamente al rendimiento y comportamiento del sitio. Al dominar estos patrones y usar bloques anidados, puedes construir configuraciones Nginx limpias, eficientes y seguras.