Ejemplos de la directiva location en Nginx
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í:
-
Exacto (=) – máxima prioridad
-
Expresiones regulares (~, ~*) – en orden de aparición
-
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.