2011-09-16 14 views
8

En nginx.conf.Cómo hacer referencia a las variables de entorno del sistema operativo en nginx.conf

Después de establecer una variable por set $name value, i hacer referencia a él como $name,

Pero cuando la exportación de un entorno de sistema operativo variable por env name_from_env, como https://nginx.org/en/docs/ngx_core_module.html#env dije, y estoy seguro de que el name_from_env es válida la que definido desde el proceso principal de nginx.

Pero, mis amigos, ¿cómo referenciarlo? $ name_from_env or $ {name_from_env} o % name_from_env% no funcionó, lo que he probado antes.

+0

o cualquier solución como la opción -D de gcc, simplemente pase las variables a nginx.conf – caoxingk

Respuesta

-1

Debe ser $ name_from_env, al igual que cualquier otra variable de Nginx.

Tenga en cuenta que env solo se puede utilizar en la parte principal de su configuración, no en bloques de http, servidor o ubicación.

Supongo que env no es realmente lo que necesita en cualquier caso. Si usted está tratando de pasar variables a su aplicación, se debe utilizar proxy_param o fastcgi_param (dependiendo de cómo se está hablando con su aguas arriba):

fastcgi_param MYVAR foo; 
+4

Genial, pero ¿cómo se pasa de la variable de entorno del sistema al archivo de configuración, al servidor ascendente? – fideloper

+0

Necesitaba una combinación de 'fastcgi_param',' load_module modules/ngx_http_perl_module.so; ', y' perl_set ... ', excepto que' perl_set' no está en 'location' sino en el mismo nivel que' server' – shadi

0

nginx no tiene la capacidad incorporada para hacer referencia a su variables de entorno en la configuración en la actualidad. Sin embargo, la solución más simple es la directiva perl_set de ngx_http_perl_module, un módulo adicional para nginx. El paquete oficial de nginx es builds the Perl module dynamically, por lo que es necesario asegurarse de instalar el paquete adicional nginx-module-perl (o configurar tu compilación personalizada de nginx, si eso es lo que estás haciendo).

de configuración es el siguiente:

# Make environment variable available 
env NAME_FROM_ENV; 
# Load dynamic module (if built with Perl as dynamic module; omit if static) 
load_module modules/ngx_http_perl_module.so; 

http { 
    server { 
     location/{ 
      # Use Lua to get get and set the variable 
      perl_set $name_from_env 'sub { return $ENV{"NAME_FROM_ENV"}; }'; 
      ... 
     } 
    } 
} 

Ver también https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html para saber cómo utilizar Lua para lograr la misma cosa. El soporte de Lua requiere un módulo de terceros y no se envía con los paquetes predeterminados de nginx.

Cuestiones relacionadas