Configuración de mapeo de rutas en Nginx

Prioridad en la coincidencia de rutas con location

En Nginx, el bloque location permite definir cómo se deben manejar las solicitudes según su ruta. Existen diferentes tipos de coincidencias que se aplican con distintas prioridades.

Tipos de coincidencia

Símbolo Descripción
= Coincidencia exacta. Solo acepta una ruta idéntica.
^~ Coincidencia por prefijo. Si coincide, se detiene la búsqueda sin evaluar exprseiones regulares.
~ Expresión regular sensible a mayúsculas.
~* Expresión regular insensible a mayúsculas.
@ Ubicación nombrada para redirecciones internas como error_page o try_files.

Orden de evaluación

  1. Coincidencia exacta (=): Se verifica primero y tiene máxima prioridad. Si hay coincidencia, termina la búsqueda.
  2. Coincidencia por prefijo (^~, /): Se selecciona la más larga entre todas las coincidencias por prefijo. Si se usa ^~, se detiene la búsqueda aquí.
  3. Expresiones regulares (~, ~*): Se evalúan en orden de aparición hasta encontrar una coincidencia.
  4. Ruta predeterminada: Si ninguna expresión regular coincide, se aplica la coincidencia por prefijo seleccionada previamente.

Ejemplo práctico

location = / {
    # Coincidencia exacta para "/"
}

location / {
    # Coincidencia general para cualquier ruta
}

location /docs/ {
    # Prefijo común pero continúa buscando
}

location ^~ /assets/ {
    # Coincidencia prioritaria para "/assets/"
}

location ~* \.(png|jpg|jpeg)$ {
    # Expresión regular para imágenes
}

location ~ /docs/v[0-9]+ {
    # Expresión regular específica para versiones en documentos
}

Gestión de recursos estáticos

Para mejorar el rendimiento del servidor web, es recomendable configurar adecuadamente el almacenamiento en caché de los recursos estáticos:

location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
    root /var/www/static;
    expires 30d;
    add_header Cache-Control "public, immutable";
    access_log off;
}

location ~* version\.(js|css)$ {
    root /var/www/static;
    add_header Cache-Control "no-cache, no-store, must-revalidate";
}

Personalización de páginas de error

Es posible redirigir errores HTTP hacia páginas personalizadas usando bloques location:

error_page 404 @notfound;
error_page 500 502 503 504 @servererror;

location @notfound {
    rewrite ^(.*)$ /errors/404.html last;
}

location @servererror {
    rewrite ^(.*)$ /errors/50x.html last;
}

location ^~ /errors/ {
    alias /usr/local/nginx/errors/;
    internal;
}

Integración dentro de un bloque server

server {
    listen 80;
    server_name example.com;
    root /var/www/app;

    include /etc/nginx/conf.d/error_pages.conf;

    location /api/ {
        proxy_pass http://backend_service;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location / {
        try_files $uri $uri/ /index.html;
    }
}

Etiquetas: Nginx routing reverse-proxy HTTP web-server

Publicado el 10-4 20:44