Est-il possible d'utiliser des variables dans les fichiers de configuration Apache?
Par exemple, lorsque je configure un site avec Django + WSGI, le fichier de configuration peut ressembler à ceci:
<Directory /path/to/foo/>
Order allow,deny
Allow from all
</Directory>
Alias /foo/static /path/to/foo/static
WSGIScriptAlias /foo /path/to/foo/run_wsgi
Et j'aimerais transformer le '/ path / to / foo' en une variable afin qu'il ne soit défini qu'à un seul endroit. Quelque chose comme:
Variable FOO /path/to/foo
…
Merci!
apache-2.2
David Wolever
la source
la source
Beaucoup plus simple en utilisant le
Define
mot-clé. Voir Définir la directive ....
la source
The variable is always globally defined and not limited to the scope of the surrounding config section.
cela signifie probablement (je ne l'ai pas encore testé) que, si vous avez plusieurs hôtes virtuels, vous ne pouvez pas utiliser la même variable (avec une valeur différente) pour chacun.Vous pouvez activer ou désactiver des éléments de configuration avec IfDefine, mais cela ne fera probablement pas ce que vous voulez. Au lieu de cela, vous pouvez définir les variables d’environnement de votre script d’init Apache pour y accéder dans la configuration. Par exemple, ajouter:
to
/etc/init.d/httpd
(avant la ligne qui appellehttpd
!) sur une machine RHEL transmet le nom d'hôte de la machine sous forme de variable. Il n'est pas nécessaire que ce soit le résultat d'une commande - tout ce qui définit une variable dans l'environnement qui se lancehttpd
est correct. Les variables peuvent être utilisées dans la configuration comme suit:Bien sûr, vous n'êtes pas limité à la
Header
directive. Les variables peuvent être utilisées n'importe où, comme<Directory ${FOO}>
etc.Si vous n'aimez pas cela (et que ce n'est pas très agréable ..), vous pouvez générer une configuration à partir d'un modèle utilisant m4 ou un autre langage de modèle.
SUPPLÉMENTAIRE :
Hrm, une façon de l’améliorer serait de stocker toutes les variables dans un fichier externe, par exemple
/etc/httpd/conf/variables.txt
:et ensuite les inclure dans votre
init.d
script Apache avec:avant d'appeler
httpd
. Toujours pas brillant mais au moins ça sépare le script de démarrage et les variables.la source
/etc/sysconfig/httpd
(RedHat, CentOS) ou/etc/apache2/envvars
(Ubuntu / Debian). Certaines variables d'environnement sont déjà là.Vous pouvez utiliser des variables d'environnement système avec mod_env et la directive PassEnv. Vois ici
Exemple pour debian:
Ajoutez votre variable à / etc / apache2 / envvars (ce fichier est utilisé par apache2ctl pour définir des variables)
Passez votre variable dans apache config
Vous pouvez ensuite accéder à la variable d’environnement système comme s’il s’agissait d’une variable apache.
la source
J'ai eu le même problème et, après quelques recherches, la solution pour Apache 2.x qui le résolvait exactement pour moi (et rien de plus) était la suivante:
http://people.apache.org/~rjung/mod_define/
Attention, après le déballage, construisez-le comme ceci (la partie installation de la documentation semble avoir oublié d'adhérer à apache2?):
Puis créez
/etc/apache2/mods-available/define.load
:Ensuite, activez le module
a2enmod
comme vous le feriez normalement.La documentation dans le lien ci-dessus montre comment l'utiliser. Maintenant, vous pouvez très simplement définir des éléments et les utiliser directement, le tout dans la même configuration apache2.
la source
incroyable, mais sur httpd 2.2 sur centos 6.4 cela fonctionne
Exporter env vars dans / etc / sysconfig / httpd
alors simplement faire ceci ...
finalement ....
la source
/etc/sysconfig/httpd
contenu est insérée danshttpd -D
(l'équivalent de ladefine
directive) qui définit les variables Apache.Vous voudrez peut-être examiner mod_passenger pour apache, qui peut également héberger des applications Django. Nous l'utilisons avec beaucoup de succès. Tout ce que vous devez faire dans le serveur virtuel est, hmm, exactement rien. La seule chose dont vous avez besoin est de créer un répertoire "public" dans la racine de l'application et de créer des liens symboliques "publics" vers vos répertoires statiques tels que "media" (cela améliorera les performances de la distribution statique) et d'y pointer votre DocumentRoot.
Puis placez le fichier suivant dans "public /../ passenger_wsgi.py":
Lancez votre navigateur: ça marche!
la source