Maison  >  Article  >  Opération et maintenance  >  Comment définir des variables d'environnement dans Apache

Comment définir des variables d'environnement dans Apache

(*-*)浩
(*-*)浩original
2019-11-29 14:45:284765parcourir

Il existe deux variables d'environnement qui affectent le serveur HTTP Apache.

Comment définir des variables d'environnement dans Apache

Tout d'abord, il existe des variables d'environnement qui sont contrôlées par le système d'exploitation sous-jacent. Ceux-ci sont définis avant le démarrage du serveur. Ils peuvent être utilisés dans des extensions de fichiers de configuration ou transmis aux scripts CGI et SSI à l'aide de la directive PassEnv. (Apprentissage recommandé : Apache Server)

Deuxièmement, Apache HTTP Server fournit un mécanisme pour stocker des informations dans des variables nommées, également appelées variables d'environnement. Ces informations peuvent être utilisées pour contrôler diverses opérations, telles que la journalisation ou le contrôle d'accès. Les variables sont également utilisées comme mécanisme pour communiquer avec des programmes externes tels que les scripts CGI. Cet article traite des différentes manières de manipuler et d'utiliser ces variables.

Bien que ces variables soient appelées variables d'environnement, elles ne sont pas les mêmes que les variables d'environnement contrôlées par le système d'exploitation sous-jacent. Au lieu de cela, ces variables sont stockées et manipulées dans les structures internes d'Apache.

Ils ne deviennent de véritables variables d'environnement du système d'exploitation que lorsqu'ils sont fournis aux scripts CGI et aux scripts d'inclusion côté serveur. Si vous souhaitez manipuler l'environnement du système d'exploitation dans lequel le serveur lui-même s'exécute, vous devez utiliser les mécanismes de manipulation d'environnement standard fournis par le shell du système d'exploitation.

Définir les variables d'environnement

Opérations d'environnement de base

La manière la plus simple de définir des variables d'environnement dans Apache est Utilisez la directive inconditionnelle SetEnv. Vous pouvez également utiliser la directive PassEnv pour transmettre des variables de l'environnement shell qui a démarré le serveur.

Paramètres conditionnels par requête

Pour augmenter la flexibilité, mod_setenvif fournit des directives qui permettent de définir des variables d'environnement pour chaque requête, en fonction des caractéristiques d'une demande spécifique.

Par exemple, une variable ne peut être définie que lorsqu'une requête est effectuée par un navigateur spécifique (agent utilisateur), ou uniquement lorsqu'un en-tête Referer [sic] spécifique est trouvé. Une plus grande flexibilité est obtenue grâce au RewriteRule de mod_rewrite, qui utilise l'option [E = ...] pour définir les variables d'environnement.

Identifiant unique Enfin, mod_unique_id définit la variable d'environnement par requête UNIQUE_ID sur une valeur dont l'unicité est garantie pour "toutes" les requêtes dans des conditions très spécifiques.

Variables CGI standard

En plus de toutes les variables d'environnement définies dans la configuration Apache et transmises depuis le shell, les scripts CGI et les pages SSI fournissent un ensemble de variables d'environnement, qui contient des méta-informations sur la demande, comme l'exige la spécification CGI.

Quelques avertissements

Les variables CGI standard ne peuvent pas être remplacées ou modifiées à l'aide des instructions de manipulation de l'environnement.

Lorsque suexec est utilisé pour lancer un script CGI, l'environnement sera effacé avec un ensemble de variables sûres avant de démarrer le script CGI. La liste des variables sûres est définie au moment de la compilation dans suexec.c.

Pour des raisons de portabilité, les noms de variables d'environnement ne peuvent contenir que des lettres, des chiffres et des traits de soulignement. De plus, le premier caractère ne peut pas être un chiffre. Les caractères qui ne correspondent pas à cette limite seront remplacés par des traits de soulignement lorsqu'ils seront transmis aux scripts CGI et aux pages SSI.

Un cas particulier est celui des en-têtes HTTP, qui sont transmis aux scripts CGI, etc. via des variables d'environnement (voir ci-dessous). Ils sont convertis en majuscules et seuls les tirets sont remplacés par des traits de soulignement ; si l'en-tête contient d'autres caractères (invalides), l'intégralité de l'en-tête est supprimée silencieusement.

La directive SetEnv s'exécute en retard lors du traitement des requêtes, ce qui signifie que des directives comme SetEnvIf et RewriteCond ne verront pas les variables définies avec elle.

Lorsque le serveur recherche un chemin via une sous-requête interne (comme la recherche d'un DirectoryIndex ou l'utilisation de mod_autoindex pour générer une liste de répertoires), les variables d'environnement par requête ne sont pas héritées dans la sous-requête. De plus, en raison de la phase API dans laquelle mod_setenvif agit, la directive SetEnvIf n'est pas évaluée séparément dans les sous-requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn