Title: Umgebungsvariablen

Der Apache-Server speichert Informationen in sogenannten Umgebungsvariablen. Mit diesen Informationen können verschiedene Operationen wie die Protokollierung oder Zugriffskontrolle gesteuert werden. Die Variablen dienen auch der Kommunikation mit externen Programmen wie zum Beispiel CGI-Skripten. Im folgenden werden die unterschiedlichen Möglichkeiten zur Manipulation und Verwendung dieser Variablen beschrieben.

Diese Variablen werden zwar als Umgebungsvariablen beschrieben, sie sind aber nicht das Gleiche wie die Umgebungsvariablen des Betriebssystems, denn sie werden in einer internen Apache-Struktur gespeichert und manipuliert. Zu Umgebungsvariablen des Betriebssystems werden sie nur bei Übergabe an CGI- und Server Side Include-Skripte. Soll die Umgebung des Betriebssystems, unter dem der Server selbst ausgeführt wird, manipuliert werden, dann müssen Sie den standardmäßigen Manipulationsmechanismus der Shell des Betriebssystems benutzen.

Umgebungsvariablen setzen mod_env mod_rewrite mod_setenvif mod_unique_id BrowserMatch BrowserMatchNoCase PassEnv RewriteRule SetEnv SetEnvIf SetEnvIfNoCase UnsetEnv
Einfache Manipulationen der Umgebung

Am einfachsten wird eine Umgebungsvariable mit der SetEnv-Direktive gesetzt. Variablen können auch mit der PassEnv-Direktive von der Shell übergeben werden, die den Server gestartet hat.

Bedingtes Setzen von Variablen pro Anfrage

Ein flexibleres Setzen der Umgebungsvariablen ist mit den Direktiven des Moduls mod_setenvif mit Bedingungen möglich, die auf Eigenschaften der einzelnen Anfragen basieren. Eine Variable kann beispielsweise nur dann gesetzt werden, wenn die Anfrage von einem bestimmten Browsertyp kommt oder wenn ein bestimmter Referer-Header vorhanden ist. Noch mehr Möglichkeiten bietet die Direktive RewriteRule des Moduls mod_rewrite, bei der die Umgebungsvariablen mit der [E=...]-Option gesetzt werden.

Eindeutige Bezeichner

Das Modul mod_unique_id schließlich setzt die Umgebungsvariable UNIQUE_ID für jede Anfrage unter sehr speziellen Bedingungen auf einen garantiert für allen Anfragen eindeutigen Wert.

CGI-Standardvariablen

Neben den in der Apache-Konfiguration gesetzten und den von der Shell übergebenen Umgebungsvariablen verfügen die CGI-Skripte und SSI-Seiten über eine Reihe von Umgebungsvariablen mit Meta-Informationen zur Anfrage, wie dies von der CGI-Spezifikation gefordert wird.

Negative Aspekte
  • Die CGI-Standardvariablen können mit den Manipulationsbefehlen für die Umgebung überschrieben oder geändert werden.
  • Werden CGI-Skripte mit suexec gestartet, wird die Umgebung bis auf einige sichere Variablen bereinigt, bevor CGI-Skripte gestartet werden. Die Liste der sicheren Variablen wird beim Kompilieren in der Datei suexec.c definiert.
  • Aus Portatbilitätsgründen dürfen die Namen der Umgebungsvariablen nur Buchstaben, Zahlen und Unterstriche enthalten. Ferner darf das erste Zeichen keine Zahl sein. Zeichen die nicht dieser Konvention entsprechen, werden bei der Übergabe an CGI-Skripte und SSI-Seiten durch Unterstriche ersetzt.
Verwendung von Umgebungsvariablen mod_authz_host mod_cgi mod_ext_filter mod_headers mod_include mod_log_config mod_rewrite Allow CustomLog Deny ExtFilterDefine Header LogFormat RewriteCond RewriteRule
CGI-Skripte

Umgebungsvariablen werden in erster Linie für die Kommunikation mit CGI-Skripten verwendet. Wie bereits erwähnt wurde, gehören zu der den CGI-Skripten übergebenen Umgebung neben den Variablen, die in der Apache-Konfiguration gesetzt wurden, Meta-Informationen über die Anfrage. Einzelheiten hierzu finden Sie unter CGI: Dynamische Inhalte.

SSI-Seiten

Von den INCLUDES-Filtern des Moduls mod_include verarbeitete SSI-Dokumente können Umgebungsvariablen mit dem echo-Element ausgeben und die Umgebungsvariablen Elemente für die Flusskontrolle benutzen, um Teile einer Seite in Abhängigkeit von der Anfrage zu gestalten. Der Apache versorgt SSI-Seiten wie oben beschrieben ebenfalls mit den standardmäßigen CGI-Umgebungsvariablen. Weitere Einzelheiten hierzu finden Sie unter Server Side Includes (SSI).

Zugriffskontrolle

Der Zugriff auf den Server kann mit den Direktiven allow from env= und deny from env= über den Wert der Umgebungsvariablen gesteuert werden. In Verbindung mit der Direktive SetEnvIf ermöglicht das eine flexible Kontrolle über den Serverzugriff anhand der Merkmale des Clients. Beispielsweise kann mit diesen Direktiven der Zugriff mit bestimmten Browsern verweigert werden.

Bedingte Protokollierung

Umgebungsvariablen können mit der %e-Option der LogFormat-Direktive im Zugriffsprotokoll aufgezeichnet werden. Außerdem kann die Entscheidung darüber, ob Anfragen protokolliert werden, vom Wert einer Umgebungsvariablen abhängig gemacht werden, wenn die bedingte Variante der CustomLog-Direktive benutzt wird. In Kombination mit SetEnvIf ist so eine flexible Steuerung der protokollierten Anfragen möglich. Es kann beispielsweise festgelegt werden, dass Anfragen nach Dateien mit der Endung gif nicht protokolliert werden, oder es können nur Anfragen von Clients außerhalb des eigenen Subnet aufgezeichnet werden.

Bedingte Antwort-Header

Die Header-Direktive kann anhand das Vorhandenseins oder Fehlen einer Umgebungsvariablen feststellen, ob ein bestimmter HTTP-Header mit der Antwort an den Client gesendet wird. Auf diese Weise kann beispielsweise ein solcher Antwort-Header nur dann gesendet werden, wenn ein entsprechender Header mit der Anfrage vom Client entgegengenommen wurde.

Aktivierung externer Filter

Externe Filter, die mit der ExtFilterDefine-Direktive des Moduls mod_ext_filter konfiguriert wurden, können mit den Optionen disableenv= und enableenv= in Abhängigkeit von einer Umgebungsvariablen aktiviert werden.

URL-Manipulationen

Mit der Variante %{ENV:...} des Teststring der Direktive RewriteCond des Moduls mod_rewrite können Entscheidungen in Abhängigkeit von Umgebungsvariablen getroffen werden. Dabei ist zu beachten, dass die Variablen, auf die mod_rewrite ohne das Präfix ENV: zugreifen kann, keine Umgebungsvariablen, sondern Variablen speziell für mod_rewrite sind, auf die von anderen Modulen nicht zugegriffen werden kann.

Umgebungsvariablen für spezielle Zwecke

Probleme bei der Zusammenarbeit haben zur Einführung spezieller Mechanismen geführt, die das Verhalten des Apache bei der Kommunikation mit bestimmten Clients beeinflussen. Um diese Mechanismen so flexibel wie möglich zu gestalten, werden hierfür normalerweise mit BrowserMatch Umgebungsvariablen definiert (SetEnv und PassEnv können ebenfalls verwendet werden).

downgrade-1.0

Die Anfrage wird in jedem Fall als HTTP/1.0-Anfrage behandelt.

force-no-vary

Vorhandene Vary-Felder werden aus dem Antwort-Header entfernt, bevor er an den Client gesendet wird. Einige Clients interpretieren dieses Feld nicht korrekt, so dass bestimmte Probleme durch Setzen dieser Variablen vermieden werden können. In Verbindung mit dieser Variablen muss auch force-response-1.0 gesetzt werden.

force-response-1.0

Diese Variable verlangt eine HTTP/1.0-Antwort an Clients, die eine HTTP/1.0-Anfrage stellen. Ursprünglich wurde diese Variable als Reaktion auf ein Problem mit den AOL-Proxies eingerichtet. Einige HTTP/1.0-Clients haben nicht korrekt geantwortet, wenn eine HTTP/1.1-Antwort einging. Mit dieser Option kann der Fehler behoben werden.

gzip-only-text/html

Erhält diese Variable den Wert 1, wird der Ausgabefilter DEFLATE des Moduls mod_deflate für andere Inhaltstypen als text/html deaktiviert. Bei Verwendung statisch komprimierter Dateien wertet mod_negotiation diese Variable ebenfalls aus (nicht nur für gzip-Verschlüsselungen, sondern für alle abweichenden Verschlüsselungen).

no-gzip

Wird diese Variable gesetzt, wird der DEFLATE-Filter des Moduls mod_deflate abgeschaltet und mod_negotiation verweigert die Auslieferung verschlüsselter Ressourcen.

nokeepalive

Deaktiviert die Option KeepAlive.

prefer-language

Diese Variable beeinflusst das Verhalten von mod_negotiation. Enthält sie ein Sprach-Tag (zum Beispiel en, ja oder x-klingon), versucht mod_negotiation eine Variante in dieser Sprache auszuliefern. Ist eine solche Variante nicht vorhanden, wird der normale Ablauf der Content Negotiation eingehalten.

redirect-carefully

Diese Variable verlangt vom Server mehr Vorsicht beim Versenden einer Umleitung an den Client. Sie wird benutzt, wenn bekannt ist, dass ein Client Schwierigkeiten mit Umleitungen hat. Implementiert wurde diese Variable ursprünglich in Reaktion auf ein Problem mit der WebFolders-Software von Microsoft, die Schwierigkeiten bei Umleitungen von Verzeichnisressourcen mit DAV-Methoden hatte.

suppress-error-charset

Verfügbar ab Version 2.0.40

Führt der Apache als Reaktion auf eine Client-Anfrage eine Umleitung durch, dann enthält die Antwort einen anzuzeigenden aktuellen Hinweis, falls der Client der Umleitung nicht automatisch folgen kann oder dies nicht tut. Entsprechend dem verwendeten Zeichensatz, gibt der Apache gewöhnlich ISO-8859-1 an.

Erfolgt die Umleitung jedoch zu einer Seite, die einen anderen Zeichensatz verwendet, werden nicht korrekte Browser-Versionen den Zeichensatz der Umleitung anstatt den der aktuellen Seite zu benutzen. Auf diese Weise wird eine Sprache wie Griechisch möglicherweise nicht korrekt dargestellt.

Wird diese Umgebungsvariable gesetzt, lässt der Apache den Zeichensatz für den Umleitungshinweis fort, so dass diese Browser dann den korrekten Zeichensatz für die Seite benutzen.

Beispiel
Das Protokollverhalten bei nicht ordnungsgemäßen Clients ändern

Fügen Sie die folgenden Zeilen in die Datei httpd.conf ein, um bekannte Client-Probleme zu beheben.

#
# Die folgenden Direktiven verändern das normale HTTP-Antwortverhalten.
# Die erste deaktiviert Keepalives für Netscape 2.x und Browser, die ihn nachbilden.
# Die Browser-Implementierungen haben bekannte Probleme. Die zweite
# ist für den Microsoft Internet Explorer 4.0b2 gedacht, dessen 
# HTTP/1.1-Implementierung fehlerhaft ist und Keepalives bei 301- und 
# 302-Antworten nicht korrekt (Umleitungen).
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#
# Die nächste Direktive deaktiviert HTTP/1.1-Antworten an Browser, die sich
# nicht an die HTTP/1.0-Spezifikation halten und nicht in der Lage sind,
# eine einfache HTTP/1.1-Antwort zu verstehen.
#
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
Keine Anfragen nach Bildern im Zugriffsprotokoll vermerken

Dieses Beispiel verhindert die Aufzeichnung von Anfragen nach Bildern im Zugriffsprotokoll. Es lässt sich einfach verändern, um die Protokollierung bestimmter Verzeichnisse oder von Anfragen bestimmter Hosts zu verhindern.

SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
CustomLog logs/access_log common env=!image-request
"Bilderdiebstahl" verhindern

Dieses Beispiel zeigt, wie Sie verhindern können, dass Fremde ihre Seiten mit Bildern von Ihrem Server schmücken. Diese Konfiguration ist nicht unbedingt zu empfehlen, ist aber in beschränktem Umfang funktionsfähig. Es wird davon ausgegangen, dass sich alle Bilder im Verzeichnis /web/images befinden.

SetEnvIf Referer "^http://www.example.com/" local_referal
# Browser ohne Referer-Feld zulassen
SetEnvIf Referer "^$" local_referal
<Directory /web/images>
   Order Deny,Allow
   Deny from all
   Allow from env=local_referal
</Directory>

Weitere Informationen hierzu finden Sie unter " Keeping Your Images from Adorning Other Sites".

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to