Heim > Artikel > Betrieb und Instandhaltung > So legen Sie Umgebungsvariablen in Apache fest
Es gibt zwei Umgebungsvariablen, die sich auf Apache HTTP Server auswirken.
Erstens gibt es Umgebungsvariablen, die vom zugrunde liegenden Betriebssystem gesteuert werden. Diese werden vor dem Start des Servers festgelegt. Sie können in Erweiterungen von Konfigurationsdateien verwendet oder mithilfe der PassEnv-Direktive an CGI-Skripte und SSI übergeben werden. (Empfohlenes Lernen: Apache Server)
Zweitens bietet Apache HTTP Server einen Mechanismus zum Speichern von Informationen in benannten Variablen, die auch Umgebungsvariablen genannt werden. Diese Informationen können zur Steuerung verschiedener Vorgänge wie Protokollierung oder Zugriffskontrolle verwendet werden. Variablen werden auch als Mechanismus zur Kommunikation mit externen Programmen wie CGI-Skripten verwendet. In diesem Artikel werden verschiedene Möglichkeiten zur Manipulation und Verwendung dieser Variablen erläutert.
Obwohl diese Variablen Umgebungsvariablen genannt werden, sind sie nicht mit den Umgebungsvariablen identisch, die vom zugrunde liegenden Betriebssystem gesteuert werden. Stattdessen werden diese Variablen in internen Apache-Strukturen gespeichert und manipuliert.
Sie werden nur dann zu tatsächlichen Umgebungsvariablen des Betriebssystems, wenn sie für CGI-Skripte und serverseitige Include-Skripte bereitgestellt werden. Wenn Sie die Betriebssystemumgebung manipulieren möchten, in der der Server selbst läuft, müssen Sie die von der Betriebssystem-Shell bereitgestellten Standardmechanismen zur Umgebungsmanipulation verwenden.
Umgebungsvariablen festlegen
Grundlegende Umgebungsoperationen
Die grundlegendste Möglichkeit, Umgebungsvariablen in Apache festzulegen, ist Verwenden Sie die unbedingte SetEnv-Direktive. Sie können die PassEnv-Direktive auch verwenden, um Variablen aus der Shell-Umgebung zu übergeben, die den Server gestartet hat.
Bedingte Einstellungen pro Anfrage
Um die Flexibilität zu erhöhen, stellt mod_setenvif Anweisungen bereit, mit denen Umgebungsvariablen abhängig von den Merkmalen pro Anfrage festgelegt werden können einer konkreten Anfrage.
Beispielsweise kann eine Variable nur gesetzt werden, wenn eine Anfrage von einem bestimmten Browser (Benutzeragenten) gestellt wird oder nur, wenn ein bestimmter Referer [sic]-Header gefunden wird. Größere Flexibilität wird durch RewriteRule von mod_rewrite erreicht, das die Option [E = ...] zum Festlegen von Umgebungsvariablen verwendet.
Unique Identifier Schließlich setzt mod_unique_id die Umgebungsvariable UNIQUE_ID pro Anfrage auf einen Wert, der unter ganz bestimmten Bedingungen garantiert für „alle“ Anfragen eindeutig ist.
Standard-CGI-Variablen
Zusätzlich zu allen Umgebungsvariablen, die in der Apache-Konfiguration festgelegt und von der Shell übergeben werden, stellen CGI-Skripte und SSI-Seiten eine Reihe von Umgebungsvariablen bereit. die Metainformationen über die Anfrage enthält, wie in der CGI-Spezifikation erforderlich.
Einige Warnungen
Standard-CGI-Variablen können nicht mithilfe von Umgebungsmanipulationsanweisungen überschrieben oder geändert werden.
Wenn suexec zum Starten eines CGI-Skripts verwendet wird, wird die Umgebung vor dem Starten des CGI-Skripts auf eine Reihe sicherer Variablen gelöscht. Die Liste der sicheren Variablen wird zur Kompilierzeit in suexec.c definiert.
Aus Gründen der Portabilität dürfen Umgebungsvariablennamen nur Buchstaben, Zahlen und Unterstriche enthalten. Außerdem darf das erste Zeichen keine Zahl sein. Zeichen, die dieser Grenze nicht entsprechen, werden bei der Übergabe an CGI-Skripte und SSI-Seiten durch Unterstriche ersetzt.
Ein Sonderfall sind HTTP-Header, die über Umgebungsvariablen an CGI-Skripte etc. übergeben werden (siehe unten). Sie werden in Großbuchstaben umgewandelt und nur Bindestriche werden durch Unterstriche ersetzt. Wenn die Kopfzeile andere (ungültige) Zeichen enthält, wird die gesamte Kopfzeile stillschweigend entfernt.
Die SetEnv-Direktive wird während der Anforderungsverarbeitung spät ausgeführt, was bedeutet, dass Direktiven wie SetEnvIf und RewriteCond die damit festgelegten Variablen nicht sehen.
Wenn der Server einen Pfad über eine interne Unteranfrage sucht (z. B. indem er einen DirectoryIndex nachschlägt oder mod_autoindex verwendet, um eine Verzeichnisliste zu generieren), werden Umgebungsvariablen pro Anfrage nicht in die Unteranfrage geerbt. Darüber hinaus wird die SetEnvIf-Direktive aufgrund der API-Phase, in der mod_setenvif Maßnahmen ergreift, in Unteranforderungen nicht separat ausgewertet.
Das obige ist der detaillierte Inhalt vonSo legen Sie Umgebungsvariablen in Apache fest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!