Volver a la página principal
viernes 8 noviembre 2024
46

Cómo usar variables de entorno y mapas en Nginx

Nginx permite definir variables de entorno y mapas para configurar parámetros dinámicamente según condiciones específicas, como el dominio, la IP del cliente o el tipo de solicitud. Estas herramientas son esenciales para manejar configuraciones más complejas y personalizadas, adaptando el comportamiento de Nginx según el entorno o el contexto de cada solicitud.

Variables de entorno en Nginx

Las variables de entorno en Nginx se pueden utilizar para almacenar información y acceder a valores externos. Estas variables son útiles para crear configuraciones reutilizables y seguras, ya que permiten definir valores como claves API, rutas de archivos o configuraciones que varían entre entornos de desarrollo y producción.

Configuración de variables de entorno

1. Definir una variable de entorno en el sistema: Las variables de entorno se establecen en el sistema operativo y Nginx las hereda cuando se inicia. Por ejemplo:

export API_KEY="mi_api_key_secreta"

2. Usar variables de entorno en Nginx: Para acceder a una variable de entorno en la configuración de Nginx, puedes usar el módulo ngx_http_perl_module o habilitar el soporte para variables de entorno en el bloque de configuración principal.

Ejemplo de uso de una variable de entorno

env API_KEY;

http {
    server {
        listen 80;
        server_name ejemplo.com;

        location /api/ {
            proxy_set_header X-API-Key $API_KEY;
            proxy_pass http://backend_api;
        }
    }
}

En este ejemplo:

  • env API_KEY; permite que Nginx acceda a la variable de entorno API_KEY.
  • proxy_set_header X-API-Key $API_KEY; envía el valor de la variable API_KEY en el encabezado de las solicitudes al servidor backend.

Directiva env

La directiva env se usa en el contexto principal para definir variables de entorno accesibles en toda la configuración de Nginx.

Uso de mapas en Nginx

La directiva map en Nginx permite definir variables dinámicas basadas en valores condicionales. Es útil para crear configuraciones específicas según el origen de la solicitud, el dominio o las rutas solicitadas, facilitando el manejo de configuraciones complejas sin duplicar directivas.

Sintaxis de map

La directiva map se define en el contexto http y utiliza una variable como clave para establecer diferentes valores según el caso.

map $variable_de_entrada $variable_de_salida {
    valor1 resultado1;
    valor2 resultado2;
    default resultado_por_defecto;
}
  • $variable_de_entrada: Es la variable o condición que define los casos a evaluar.
  • $variable_de_salida: Variable que almacenará el resultado según la condición que cumpla $variable_de_entrada.

Ejemplo de configuración de un mapa en Nginx

En este ejemplo, se configura un mapa que cambia la ruta raíz según el nombre del dominio:

http {
    map $host $document_root {
        ejemplo.com /var/www/ejemplo;
        otro-sitio.com /var/www/otro;
        default /var/www/default;
    }

    server {
        listen 80;
        server_name ejemplo.com otro-sitio.com;

        location / {
            root $document_root;
            index index.html;
        }
    }
}

En este ejemplo:

  • $host es la variable de entrada, que contiene el nombre de dominio.
  • $document_root almacena la ruta raíz que se usará según el dominio. Por ejemplo, si el host es ejemplo.com, el document_root será /var/www/ejemplo.

Parámetros comunes en mapas

Parámetro Descripción
default Valor por defecto si no se cumple ninguna de las condiciones definidas en el mapa.
$variable_de_entrada Variable que define los casos evaluados en el mapa (como $host, $uri, $remote_addr).

Ejemplos adicionales de variables y mapas en Nginx

1. Definir una variable de entorno para una clave API en producción:

env API_KEY_PROD;

   server {
       location /api/ {
           proxy_set_header X-API-Key $API_KEY_PROD;
           proxy_pass http://backend_api;
       }
   }

2. Mapa para redirigir usuarios según IP:

map $remote_addr $geo_limit {
       192.168.1.0/24 "local";
       default "global";
   }

   server {
       location / {
           if ($geo_limit = "local") {
               return 403;
           }
           root /var/www/global;
       }
   }

3. Mapa para definir límites de velocidad por usuario:

map $http_user_agent $limit_rate {
       ~*Chrome 100k;
       ~*Firefox 50k;
       default 10k;
   }

   server {
       location /downloads/ {
           limit_rate $limit_rate;
       }
   }

Consideraciones de seguridad

  • No almacenar datos sensibles directamente en los archivos de configuración de Nginx, como contraseñas o claves, si no es necesario. Utiliza variables de entorno para mejorar la seguridad.
  • Prueba las configuraciones al utilizar mapas complejos para asegurarte de que cumplen correctamente con la lógica esperada.

Referencias

Para más detalles sobre el uso de variables de entorno y mapas en Nginx, consulta la documentación oficial de Nginx.

Etiquetas:
nginx
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer