J'ai le scénario suivant: J'ai une variable env $SOME_IP
défini et souhaitez l'utiliser dans un bloc nginx. Se référant à la documentation nginx J'utilise la directive env
dans le nginx.conf
fichier comme suit:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
env SOME_IP;
Maintenant, je veux utiliser la variable pour un proxy_pass
. Je l'ai essayé comme suit:
location / {
proxy_pass http://$SOME_IP:8000;
}
Mais je me retrouve avec ce message d'erreur: nginx: [emerg] unknown "some_ip" variable
L'utilisation correcte serait $SOME_IP_from_env
, mais les variables d'environnement définies à partir de nginx.conf ne peuvent pas être utilisées dans les blocs serveur, emplacement ou http.
Vous pouvez utiliser des variables d'environnement si vous utilisez bundle openresty , qui inclut Lua.
Vous pouvez accéder aux variables via des modules - j'ai trouvé des options pour le faire avec Lua et Perl.
A écrit à ce sujet sur le blog de mon entreprise:
Le TL; DR:
env API_KEY;
Puis:
http {
...
server {
location / {
# set var using Lua
set_by_lua $api_key 'return os.getenv("API_KEY")';
# set var using Perl
Perl_set $api_key 'sub { return $ENV{"API_KEY"}; }';
...
}
}
}
EDIT: le blog d'origine est mort, lien modifié vers le cache de la machine de retour
Créez un modèle de votre configuration et appliquez envsubst
dessus au démarrage du conteneur.
envsubst
est inclus dans l'image de docker NGINX officielle. Voir sing-environment-variables-in-nginx-configuration
Utilisation de variables d'environnement dans la configuration nginx
Prêt à l'emploi, nginx ne prend pas en charge les variables d'environnement dans la plupart des blocs de configuration. Mais envsubst peut être utilisé comme solution de contournement si vous devez générer votre configuration nginx dynamiquement avant le démarrage de nginx.
Voici un exemple utilisant docker-compose.yml:
web: image: nginx volumes: - ./mysite.template:/etc/nginx/conf.d/mysite.template ports: - "8080:80" environment: - NGINX_Host=foobar.com - NGINX_PORT=80 command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
Le
mysite.template
le fichier peut alors contenir des références de variables comme ceci:
listen ${NGINX_PORT}
;