Ist es möglich, Variablen in Apache-Konfigurationsdateien zu verwenden?
Wenn ich beispielsweise eine Site mit Django + WSGI einrichte, sieht die Konfigurationsdatei möglicherweise folgendermaßen aus:
<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
Und ich möchte das '/ path / to / foo' in eine Variable verwandeln, damit es nur an einer Stelle definiert werden muss. So etwas wie:
Variable FOO /path/to/foo
…
Vielen Dank!
apache-2.2
David Wolever
quelle
quelle
Viel einfacher mit
Define
Schlüsselwort. Siehe Richtlinie definieren ....
quelle
The variable is always globally defined and not limited to the scope of the surrounding config section.
Sie, dass dies wahrscheinlich bedeutet (ich habe es im Moment nicht getestet), dass Sie bei mehreren vhosts nicht für jede Variable dieselbe Variable (mit einem anderen Wert) verwenden können.Sie können Konfigurationsbits mit IfDefine aktivieren oder deaktivieren, aber das wird wahrscheinlich nicht das tun, was Sie wollen. Stattdessen können Sie Umgebungsvariablen in Ihrem Apache-Init-Skript festlegen, auf die innerhalb der Konfiguration zugegriffen werden soll. Zum Beispiel hinzufügen:
to
/etc/init.d/httpd
(vor derhttpd
aufrufenden Zeile !) auf einem RHEL-Computer übergibt den Hostnamen des Computers als Variable. Es muss nicht die Ausgabe eines Befehls sein - alles, was eine Variable in der Umgebung festlegt, die gestartet wird,httpd
ist in Ordnung. Variablen können in der Konfiguration wie folgt verwendet werden:Natürlich sind Sie nicht auf die
Header
Richtlinie beschränkt. Die Variablen können überall verwendet werden, wie z<Directory ${FOO}>
.Wenn Sie dies nicht mögen (und es ist nicht so schön ..), können Sie eine Konfiguration aus einer Vorlage mit m4 oder einer anderen Vorlagensprache generieren .
ZUSÄTZLICHE :
Hrm, eine Möglichkeit, es besser zu machen, wäre, alle Variablen in einer externen Datei zu speichern, vielleicht
/etc/httpd/conf/variables.txt
:und fügen Sie diese dann in Ihr Apache-
init.d
Skript ein:bevor Sie anrufen
httpd
. Immer noch nicht brillant, aber es trennt zumindest das Startskript und die Variablen.quelle
/etc/sysconfig/httpd
(RedHat, CentOS) oder/etc/apache2/envvars
(Ubuntu / Debian). Einige Umgebungsvariablen sind bereits vorhanden.Sie können Systemumgebungsvariablen mit mod_env und der PassEnv-Direktive verwenden. Siehe hier
Beispiel für debian:
Fügen Sie Ihre Variable zu / etc / apache2 / envvars hinzu (diese Datei wird von apache2ctl verwendet, um Variablen zu definieren)
Übergeben Sie Ihre Variable an Apache Config
Sie können dann auf die Systemumgebungsvariable zugreifen, als wäre es eine Apache-Variable.
quelle
Ich hatte das gleiche Problem und nach einigen Nachforschungen war die Lösung für Apache 2.x, die es für mich genau löste (und nicht mehr):
http://people.apache.org/~rjung/mod_define/
Beachten Sie, dass Sie es nach dem Entpacken so erstellen sollten (der Install-Teil der Dokumentation scheint vergessen zu haben, sich an Apache2 zu halten?):
Dann erstelle
/etc/apache2/mods-available/define.load
:Aktivieren Sie danach das Modul
a2enmod
wie gewohnt.Die Dokumente im obigen Link zeigen, wie man es benutzt. Jetzt können Sie ganz einfach Dinge definieren und direkt verwenden, alles innerhalb derselben apache2-Konfiguration.
quelle
Unglaublich, aber auf httpd 2.2 auf Centos 6.4 funktioniert dies
Exportieren Sie env-Dateien in / etc / sysconfig / httpd
dann mach einfach das ...
dann endlich ....
quelle
/etc/sysconfig/httpd
Inhalts inhttpd -D
(das Äquivalent zurdefine
Direktive) geht, die Apache-Variablen definieren.Vielleicht möchten Sie in mod_passenger nach Apache suchen, das auch Django-Apps hosten kann. Wir setzen es mit großem Erfolg ein. Alles, was Sie im vhost tun müssen, ist genau nichts. Sie müssen lediglich ein "öffentliches" Verzeichnis im Anwendungsstamm erstellen und Symlinks in "public" zu Ihren statischen Verzeichnissen wie "media" erstellen (dies steigert die Leistung der statischen Bereitstellung) und Ihren DocumentRoot darauf verweisen.
Legen Sie dann die folgende Datei in "public /../ passenger_wsgi.py" ab:
Starten Sie Ihren Browser: Es funktioniert!
quelle