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.
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.
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.
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.
La directiva env
se usa en el contexto principal para definir variables de entorno accesibles en toda la configuración de 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.
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
.
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á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 ).
|
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;
}
}
Para más detalles sobre el uso de variables de entorno y mapas en Nginx, consulta la documentación oficial de Nginx.
Jorge García
Fullstack developer