Administration réseau sous Linux/Apache
|
Une proposition de fusion est en cours entre Apache et Le système d'exploitation GNU-Linux/Le serveur Web Apache. Les avis sur cette proposition sont rassemblés dans une section de Wikilivres:Pages à fusionner. Les modifications majeures apportées, entre temps, aux pages doivent être commentées sur la même page.
|
À faire après la pose du bandeau
Vous venez d’apposer le modèle {{à fusionner}}, suivez ces étapes :
1. | Apposez le bandeau sur l’(les) autre(s) page(s) à fusionner. | Utilisez ce texte :
{{à fusionner|Apache|Le système d'exploitation GNU-Linux/Le serveur Web Apache}} |
---|---|---|
2. | Important : ajoutez une section dans Pages à fusionner en motivant votre proposition. | Utilisez ce texte :
== [[Apache]] et [[Le système d'exploitation GNU-Linux/Le serveur Web Apache]] == |
3. | Pensez à informer le(s) contributeur(s) principal(ux) de la page. | Utilisez ce texte :
{{subst:Avertissement fusion|Apache|Le système d'exploitation GNU-Linux/Le serveur Web Apache|7=~~~~}} |
Apache est un serveur HTTP libre.
Un serveur HTTP permet d'héberger des sites web qui seront accessibles avec un navigateur tel que Mozilla Firefox, Internet Explorer ou encore Chrome.
Un site web peut fournir tout type de contenu (des fichiers textes, HTML, Flash, zip…).
Ce contenu peut être statique (le serveur transmet un fichier au navigateur) ou dynamique (le contenu est généré par un programme exécuté par le serveur). Les sites web contiennent généralement plusieurs types de documents, certains étant statiques et d'autres dynamiques.
Nous traiterons ici d'Apache 2.2 sur un système Debian (et ses dérivés, comme Ubuntu).
Installation
modifierLAMP
modifierLogiciel tout-en-un pour Linux (Apache + MySQL + PHP), comme WAMP pour Windows.
# apt-get install tasksel
# tasksel install lamp-server
Installation manuelle
modifierApache sur Debian / Ubuntu
modifier# apt-get install apache2
Le service peut ne pas être lancé par défaut, mais même s'il l'est on peut quand-même essayer de l'activer avec :
# /etc/init.d/apache2 start
On peut ensuite tester le serveur, pour voir si une page s'affiche ou s'il refuse la connexion :
$ lynx http://localhost/
Cette adresse est le rebouclage, elle peut aussi être rentrée directement dans tout navigateur web.
Si Apache était déjà installé vérifier le fichier pour indiquer le démarrage automatique d'Apache 2 /etc/default/apache2 :
# vi /etc/default/apache2 ... NO_START=0
Installer PHP
modifierOn distingue principalement deux versions de PHP : celle dont le binaire est appelé par le serveur Web, et php-fpm qui possède son propre service daemon (aussi appelé par le serveur Web) testable ainsi :
telnet localhost 9000 CTRL + ALT + ] quit
FPM signifie FastCGI Process Manager, puisque le processus PHP-fpm écoute les requêtes CGI[1]. Cela peut se traduire soit par des requêtes TCP/IP, soit par un socket Unix (.sock dans le vhost).
PHP peut-être installé avec toutes les déclinaisons de la distribution Debian (stable, testing, unstable). Il suffit pour cela d'insérer vos lignes préférées dans le fichier /etc/apt/sources.list :
deb http://ftp.fr.debian.org/debian/ stable main non-free contrib deb-src http://ftp.fr.debian.org/debian/ stable main non-free contrib
Ce qui suit suppose que le serveur Web a bien été installé ; exécuter les commandes suivantes :
sudo apt-get update && apt-get install php8.2 && apt-get install libapache2-mod-php8.2
Une fois ces commandes exécutées, redémarrer le serveur Web. Dans le cas d'Apache cela s'effectue avec la commande suivante :
/etc/init.d/apache2 restart
Si tout s'est bien passé, vous disposez maintenant d'un serveur Web qui a la capacité d'exécuter des scripts PHP dans votre navigateur.
Testons :
$ lynx http://localhost/test.php
Pour débugger :
$ tail /var/log/apache2/error.log
Mise à jour
modifierPour PHP 7 ou 8 sur Ubuntu :
sudo add-apt-repository ppa:ondrej/php
Sur Debian :
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
Puis :
sudo apt update sudo apt install php8.2 php8.2-common php8.2-cli php8.2-fpm sudo a2enmod php8.2
Une fois les serveurs Web installés, ils se lancent automatiquement à chaque démarrage de la machine, ce qui est souhaitable pour un serveur, mais pas toujours pour un PC. Pour éviter cela, il suffit d'y désactiver les daemons :
sudo update-rc.d apache2 disable sudo update-rc.d mysql disable
Bibliothèques
modifierVoici une liste de bibliothèques fréquemment utilisées dans les applications :
# apt-get install -y \ php8.2-mysql \ php8.2-cli \ php8.2-gd \ php8.2-curl \ php8.2-mbstring \ php8.2-xml
D'autres s'installent avec pecl au lieu de apt.
Pour les activer après installation, on peut éditer le php.ini ou lancer : phpenmod nom_du_module_php. Ex : sudo phpenmod gd
.
Pour les désactiver : phpdismod nom_du_module_php
Pour détecter l'emplacement du php.ini de la version de PHP par défaut : php --ini
.
Désinstaller PHP
modifierPour éviter de désinstaller tous les paquets PHP un par un (par exemple après une bascule de PHP7.0 vers PHP7.1), il existe "ppa-purge" :
sudo apt-get install ppa-purge sudo ppa-purge ppa:ondrej/php-7.0
Apache sur Gentoo
modifierPremièrement il faut installer Apache :
emerge apache
Ensuite, il faut installer PHP :
emerge dev-lang/php
Puis il faut qu'apache utilise PHP dans sa configuration.
Code : Configuration de apache |
# nano -w /etc/conf.d/apache2 APACHE2_OPTS="-D PHP5" |
MySQL seul
modifierMySQL est disponible sur http://dev.mysql.com/downloads/gui-tools/5.0.html au format :
- .msi (Windows)
- .dmg (Mac)
- .rpm (Linux)
- .tar
En l'absence de gestionnaire de paquets, utiliser le .tar ainsi :
shell> groupadd mysql shell> useradd -r -g mysql mysql shell> cd /usr/local shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz shell> ln -s full-path-to-mysql-VERSION-OS mysql shell> cd mysql shell> chown -R mysql . shell> chgrp -R mysql . shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data shell> bin/mysqld_safe --user=mysql &
APT
modifier$ sudo apt-get install mysql-server mysql_secure_installation
Variante
modifierLa dénomination des paquets mentionnés peut varier légèrement selon la version. Dans un terminal, entrez :
$ sudo apt-get install mysql-server
et confirmez.
(Remarque : il semblerait qu'en installant le paquet "mysql-server-5.0", au lieu du paquet mentionné plus haut, certaines personnes rencontrent des problèmes. Il est donc préférable d'installer ce paquet, ou d'installer la dernière version 4 stable avec : $ sudo apt-get install mysql-server-4.1. Consultez le forum pour plus d'informations : [1])
Lancez ensuite la commande :
cd && sudo mysql_secure_installation
Appuyez sur Entrée lorsqu'il vous demande le mot de passe root MySQL : pour le moment il n'y en a pas.
Le script vous demande alors si vous voulez mettre un mot de passe pour l'utilisateur root. Répondez Y, et entrez (2 fois le nouveau mot de passe du root MySQL). Il vous pose ensuite une série de questions. Si vous ne savez pas quoi répondre, acceptez les choix par défaut en appuyant simplement sur Enter.
Votre serveur MySQL est prêt. Par défaut il se lance à chaque démarrage du système, si vous ne le souhaitez pas, il vous suffit de lancer :
$ sudo dpkg-reconfigure mysql-server
et de répondre "Non" à la question du démarrage systématique de MySQL.
Sur Gentoo
modifieremerge mysql
Modules
modifierDe nombreux modules complémentaires peuvent être installés sur Apache.
Pour les lister, on utilise apachectl
(parfois apache2ctl
) :
apachectl -t -D DUMP_MODULES
ou
apache2ctl -M
Pour activer un module :
a2enmod Nom_du_module
Un fichier est alors créé dans /etc/apache2/mods-enabled/.
Exemple pour la réécriture d'URL :
a2enmod rewrite
Pour le désactiver :
a2dismod Nom_du_module
La configuration du module reste toutefois disponible dans /etc/apache2/mods-available/.
phpenmod mbstring
Sites
modifierPour lister les sites du serveur :
apachectl -S
Pour activer un site :
a2ensite Nom_du_site
Le fichier du site est alors visible dans /etc/apache2/sites-enabled/.
Pour le désactiver :
a2dissite Nom_du_site
Le site est dans /etc/apache2/sites-available/.
Problème d'encodage d'Apache2
modifierSi vous rencontrez un problème d'encodage des caractères de vos pages, par exemple les caractères accentués apparaissant sous la forme "�" (<?>), c'est probablement parce qu'Apache2 déclare dans les en-têtes HTTP qui accompagnent les pages visionnées un encodage par défaut en Unicode (UTF-8) :
Content-Type: text/html; charset=UTF-8
Tandis que les pages visionnées utilisent un autre encodage des caractères, comme par exemple Latin1 (ISO-8859-1). Même si vos documents indiquent le jeu de caractères utilisé, le paramètre donné par le serveur dans les en-têtes HTTP est prioritaire !
Pour corriger ce problème, il faudra éditer /etc/apache2/apache2.conf :
$ sudo gedit /etc/apache2/apache2.conf
Encodage par défaut en Latin1 (ISO-8859-1)
modifierCherchez la ligne suivante :
#AddDefaultCharset ISO-8859-1
Décommentez-la en enlevant le # :
AddDefaultCharset ISO-8859-1
Pour ceux qui ont la locale iso-8859-15 (sinon vous pouvez faire "sudo dpkg-reconfigure locales" pour l'ajouter) et qui désirent l'utiliser par défaut, ajoutez un 5 en fin de ligne :
AddDefaultCharset ISO-8859-15
ainsi que la ligne suivante dans le paragraphe en-dessous :
AddCharset ISO-8859-15 .iso8859-15 .latin15 .fr
Il ne vous reste plus qu'à mettre "fr" en première position dans la ligne LanguagePriority (juste au-dessus), et à demander à apache de relire sa configuration :
$ sudo /etc/init.d/apache2 reload
Aucun encodage par défaut
modifierIl est également possible de s'affranchir de tout encodage par défaut, de la manière suivante :
Cherchez la directive AddDefaultCharset :
AddDefaultCharset ISO-8859-1
Remplacez l'attribut par la valeur Off :
AddDefaultCharset Off
Là encore, on demandera à Apache de relire sa configuration :
$ sudo /etc/init.d/apache2 reload
Maintenant, les en-têtes HTTP ne contiendront plus d'indication d'encodage des caractères. Attention : il faudra alors que chaque page indique l'encodage utilisé, car s'en remettre à la détection automatique par les navigateurs peut s'avérer assez aléatoire !
Fichiers log
modifierPar défaut sous Debian, Apache enregistre les erreurs dans le fichier /var/log/apache2/error.log
. Quand quelque chose ne fonctionne pas, ce fichier fournit souvent des pistes pour trouver la solution.
Il enregistre également toutes les requêtes dans /var/log/apache2/access.log
.
Configuration de base
modifierSous Debian, Apache se lance automatiquement lorsqu'on l'installe et à chaque démarrage du système. Lorsqu'on modifie sa configuration, il faut lui faire prendre connaissance des changements avec la commande
/etc/init.d/apache2 reload
Pour l'arrêter, le lancer ou le relancer on utilisera la même commande avec stop
, start
ou restart
.
Pour d'autres systèmes il faudra consulter la documentation du système ou celle d'Apache.
Configuration du serveur
modifierLa configuration du serveur se trouve dans /etc/apache2/apache2.conf
.
Ce fichier contient des instructions Include
qui permettent de déplacer certaines parties de la configuration dans d'autres fichiers.
Debian utilise cette fonctionnalité pour les modules (comme PHP) et la gestion des serveurs virtuels :
Configuration des modules
modifierLe répertoire /etc/apache2/mods-available
contient les modules installés.
Le répertoire /etc/apache2/mods-enabled
contient les modules activés.
Les modules activés sont des liens symboliques vers les modules installés.
Pour activer ou désactiver un module, on peut manipuler directement les liens ou utiliser les commandes a2enmod
et a2dismod
(voir les pages de man).
Configuration des sites
modifierDe la même manière, le répertoire /etc/apache2/sites-available
contient les sites web disponibles et /etc/apache2/sites-enabled
les sites activés.
Il en existe un préinstallé : le site default
.
Les sites peuvent s'activer ou se désactiver en manipulant les liens dans sites-enabled
ou en utilisant a2ensite
et a2dissite
.
Quelques directives classiques
modifierLa syntaxe d'Apache est assez simple. On trouve des blocs (ou contextes) comme par exemple :
<VirtualHost ...> # début de bloc VirtualHost ... <Directory ...> # début de bloc Directory ... </Directory> # fin de bloc Directory ... </VirtualHost> # fin de bloc VirtualHost
et des directives comme par exemple
Include /etc/apache2/sites-enabled/
Les directives qui permettent de configurer le serveur lui-même sont généralement placées dans apache2.conf
.
Celles qui ne concernent qu'un site web sont déportées dans le fichier de configuration du site (sites-available/mon-site-web
).
La directive DocumentRoot fixe la racine du serveur Web, c'est-à-dire le répertoire de base où se trouvent les documents.
Par exemple avec la directive DocumentRoot /var/www/html
, si le navigateur demande la page http://serveur/repertoire/fichier.txt
, le serveur cherchera le fichier /var/www/html/repertoire/fichier.txt
.
UserDir permet d'indiquer le répertoire personnel des utilisateurs du système.
La directive UserDir public_html
signifie qu'un utilisateur peut publier ses pages web personnelles dans un sous-répertoire public_html
de son répertoire personnel.
Pour l'utilisateur toto, c'est généralement /home/toto/public_html
.
Sa page d'accueil sera alors accessible par l'URL spéciale http://serveur/~toto
.
DirectoryIndex indique la liste des fichiers qu'Apache cherchera à afficher si l'URL n'en précise pas.
Par exemple si la configuration contient DirectoryIndex index.html index.php
et qu'on demande l'URL http://serveur/repertoire/
, Apache va chercher dans le répertoire un fichier index.html
ou index.php
.
Si un de ces fichiers existe, il sera affiché.
Sinon, Apache affichera soit la liste des fichiers, soit une erreur (suivant la présence de Indexes
dans la directive Options).
AccessFileName définit le nom du fichier qu'on peut placer dans un répertoire pour en modifier sa configuration. Cela permet, par exemple, d'interdire localement l'affichage de la liste des fichiers, ou de protéger par mot de passe un répertoire et ses sous répertoires.
Listen indique à Apache sur quel port TCP il doit écouter. Le port par défaut du protocole HTTP est 80.
ServerName indique à Apache son nom de domaine et éventuellement son port.
Il s'en sert lorsqu'il doit communiquer son adresse au client (le navigateur).
C'est le cas par exemple lorsqu'on demande l'adresse http://serveur/repertoire
sans slash (/
) à la fin.
Comme ce n'est pas une URL valide (l'URL d'un répertoire doit se terminer par un slash), Apache utilise la directive ServerName
pour reconstruire une adresse avec un slash et la renvoi au client.
Gestion du nombre d'instances d'Apache
modifierLe serveur Apache utilise plusieurs processus et prend en charge plusieurs types de stations multi-processeurs en utilisant les modules MPM (multi processing modules)[2].
Le premier module prefork utilise des processus (pour systèmes stables ou plus anciens), le deuxième worker utilise des threads, et le dernier des threads par processus. Le dernier module perchild est en cours de développement et n'est pas recommandé.
Celui utilisé par défaut sous Linux est prefork.
Exemple commenté
modifierLa partie du fichier de configuration traitant la gestion du nombre de processus est la suivante :
##
## Server-Pool Size Regulation (MPM specific) ##
# prefork MPM
# StartServers ......... nb de processus serveur au demarrage
# MinSpareServers ...... nb minimum de processus serveurs '''libres''' instanciés
# MaxSpareServers ...... nb maximum de processus serveurs '''libres''' instanciés. S'il y en a MaxSpareServers+1 on les tues
# MaxClients ........... nb maximum de processus serveurs qui peuvent demarrer
# MaxRequestsPerChild .. nb maximum de requètes gérées par processus serveur.
# Apres MaxRequestsPerChild requètes, le processus meurt.
# Si MaxRequestsPerChild=0, alors le processus n'expire jamais.
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 20
MaxRequestsPerChild 0
</IfModule>
# pthread MPM # StartServers ......... initial number of server processes to start
# MaxClients ........... maximum number of server processes allowed to start
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum number of worker threads which are kept spare
# ThreadsPerChild ...... constant number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of requests a server process serves
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
# perchild MPM # NumServers ........... constant number of server processes
# StartThreads ......... initial number of worker threads in each server process
# MinSpareThreads ...... minimum number of worker threads which are kept spare
# MaxSpareThreads ...... maximum number of worker threads which are kept spare
# MaxThreadsPerChild ... maximum number of worker threads in each server process
# MaxRequestsPerChild .. maximum number of connections per server process (then it dies)
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
MaxRequestsPerChild 0
AcceptMutex fcntl
</IfModule>
Pour activer le module :
a2enmod mpm_prefork
On voit ensuite les processus d'avance :
$ ps -ef |grep apache
root 32026 1 0 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 32029 32026 2 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 32030 32026 0 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 32031 32026 0 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 32032 32026 0 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 32033 32026 0 15:16 ? 00:00:00 /usr/sbin/apache2 -k start
Paramétrage des répertoires
modifierChaque répertoire auquel Apache accède peut être configuré indépendamment (et ses sous-répertoires en héritent).
Le paramétrage d'un répertoire se met dans un "conteneur" délimité par <Directory chemin_du_répertoire>
et </Directory>
.
La configuration s'applique au répertoire et à tous ses sous répertoires.
Si un sous-répertoire possède également sa propre configuration, elle vient s'ajouter à celle du parent.
Voici quelques exemples de contrôle d'accès. Plus de détails sont donnés dans la section "Un exemple de configuration".
# Configuration du répertoire racine du système <Directory /> # On n'autorise aucune option particulière Options None # Aucune modification n'est autorisé dans les fichiers .htaccess AllowOverride None </Directory> # Pour la racine du serveur: <Directory /var/www/html> # Quelques options Options Indexes Includes FollowSymLinks # Les options peuvent être changées dans un .htaccess AllowOverride All # Permet à tout le monde d'accéder aux documents Allow from All # Spécifie comment appliquer la règle précédente Order allow,deny </Directory> # Le répertoire contenant des exécutables CGI <Directory /usr/lib/cgi-bin> AllowOverride None Options ExecCGI </Directory>
Les paramètres possibles de la directive Options sont : "None", "All", "Indexes", "Includes", "FollowSymLinks", "ExecCGI", ou "MultiViews".
Gérer les pages Web personnelles
modifierIl est possible de permettre aux utilisateurs du système de diffuser des pages personnelles sans avoir à créer un site par utilisateur.
Il faut pour cela utiliser le module userdir
.
Le répertoire contenant le site web doit être créé dans le home de l'utilisateur et doit être accessible en lecture pour tous.
Le nom du répertoire est défini par la directive UserDir.
Par défaut il s'agit du répertoire public_html
.
L'adresse pour accéder à ces sites personnels est le nom de l'utilisateur précédé d'un tilde (~
).
Par exemple un utilisateur toto sur le serveur www.iut.clermont.fr peut créer les pages de son site dans le répertoire /home/toto/public_html
, et on pourra y accéder avec l'adresse : http://www.iut.clermont.fr/~toto/.
Il est possible de n'autoriser que certains utilisateurs à bénéficier du UserDir
.
Par exemple pour n'autoriser que sasa et toto à avoir un site personnel :
UserDir disabled UserDir enabled sasa toto
Pour définir les options de ces répertoires, on peut utiliser une clause Directory
pour le répertoire /home/*/public_html
:
<Directory /home/*/public_html> Order allow,deny Allow from all </Directory>
La clause UserDir public_html
ne fonctionne que pour des utilisateurs ayant un compte sur le système.
L'URL http://www.iut.clermont.fr/~toto ne fonctionne que si toto est un véritable utilisateur (auquel cas l'expression Unix ~toto
a un sens), pas seulement si le répertoire /home/toto/public_html
existe.
On peut utiliser une autre forme de UserDir pour autoriser les répertoires sans forcément qu'il y ait un compte unix associé :
UserDir /home/*/public_html
Le CGI (Common Gateway Interface) est une norme permettant à Apache d'exécuter des programmes écrits en n'importe quel langage (Bash, C, Java, Perl, PHP, Python...), du moment qu'il est exécutable et qu'il respecte certaines contraintes d'entrées/sortie.
Configurer l'accès aux scripts CGI
modifierPour qu'Apache prenne en charge les scripts, il est nécessaire d'effectuer un minimum de paramétrage dans la configuration du site.
Activer le module
modifiera2enmod cgi
ScriptAlias
modifierLa directive (de httpd.conf) :
ScriptAlias /cgi-bin/ /chemin des scripts/
précise le nom du répertoire où Apache est autorisé à exécuter des scripts CGI[3].
Exemple Unix :
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Exemple Windows, utiliser le format URL (pas d'antislash) :
ScriptAlias /cgi-bin/ "C:/wamp/bin/apache/apache2.2.27/cgi-bin/"
En fait le chemin /cgi-bin/
n'existe pas vraiment, il est dirigé vers le chemin des scripts défini par la directive, et cela permet d'écrire des URL comme http://serveur/cgi-bin/mon_script
.
ExecCGI
modifierLa clause suivante active l'option ExecCGI
dans /var/www/cgi-bin
, ce qui autorise Apache à exécuter les scripts sur le serveur :
<Directory /var/www/cgi-bin> Options ExecCGI </Directory>
Par exemple : vous écrivez un script essai.cgi
, et vous voulez que /home/httpd/cgi-bin
contienne les scripts.
Il faut donc au moins écrire :
<Directory /home/httpd/cgi-bin> Options ExecCGI </Directory>
L'appel à un script essai.cgi sera effectué par l'URL : http://serveur/cgi-bin/essai.cgi
AddHandler
modifierCette clause permet de choisir les extensions de fichiers qui seront autorisés, ex :
AddHandler cgi-script .cgi .exe .pl .py .vbs
Récapitulatif
modifierExemple complet sur Windows, dans la configuration Apache :
ScriptAlias /cgi-bin/ "E:/www/cgi-bin/" <Directory "E:/www/cgi-bin/"> Options FollowSymLinks Indexes AllowOverride All Order deny,allow Allow from all Require all granted </Directory>
Dans E:/www/cgi-bin/.htaccess
:
AddHandler cgi-script .cgi .exe .pl .py .vbs
Écrire un programme CGI
modifierLa contrainte principale concerne la sortie du programme. Si un programme CGI génère des données sur sa sortie standard, il doit les précéder d'un en-tête HTTP permettant de les identifier.
Bash
modifierVoici un exemple de programme CGI écrit en bash :
#!/bin/bash
# Header
echo "Content-type: text/html"
# Fin du header
echo ""
# Contenu à afficher dans le navigateur
echo "<html><body>Hello World!</body></html>"
Ce script génère une page HTML.
Perl
modifier#!c:/perl/perl/bin/perl.exe -w
use CGI;
my $query = new CGI;
my $Name = $query->param('Name');
print $query->header();
print "Hello World!"
Python
modifier#!C:\Program Files (x86)\Python\python.exe
# -*- coding: UTF-8 -*-
print "Content-Type: text/plain;charset=utf-8"
print
print "Hello World!"
- Pour plus de détails voir : Programmation Python/L'interface CGI.
VBS
modifierPour Windows[4].
'!c:/windows/system32/cscript //nologo
Wscript.Echo "Content-type: text/html" & vbLF & vbLF
WScript.Echo "Hello World!"
Wscript.Quit 0
Références
modifierLe module PHP
modifierPHP a normalement été intégré au serveur Apache sous forme d'un module chargeable situé comme tous les autres modules d'Apache dans /usr/lib/apache2/modules
.
Les fichiers /etc/apache2/mods-availiable/php5.load
et /etc/apache2/mods-availiable/php5.conf
contiennent les directives LoadModule
et AddType
qui permettent à Apache d'exécuter du PHP quand on demande un fichier se terminant par .php
.
Ils doivent être liés dans /etc/apache2/mods-enabled
pour activer PHP.
On peut utiliser pour cela la commande a2enmod
.
En marge de Apache, PHP possède lui aussi son fichier de configuration, souvent /etc/php.ini
.
Il n'est pas particulièrement conseillé d'y intervenir sauf si on sait ce que l'on fait.
On peut néanmoins y observer que PHP prend bien en compte le module d'extension MySQL, contenant les fonctions d'accès au "moteur" de base de données MySQL (qui a dû être installé à part), par la présence de extension=mysql.so
.
En cas de modification d'un fichier de configuration, comme PHP fonctionne comme module d'Apache, il faut redémarrer Apache pour qu'il réinitialise PHP par la lecture de php.ini.
/etc/init.d/apache2 restart
Principe
modifierPour protéger un répertoire en particulier (et ses sous-répertoires), il suffit de placer un fichier nommé .htaccess
dedans. Apache appliquera instantanément ensuite les règles qu'il contient, uniquement dans cette arborescence. La syntaxe pour définit ces règles (ex : redirections ou protections) est la même que dans les vhosts, sauf que cela n'affectera que le répertoire du fichier .htaccess (donc pas de clause Directory
).
L'explorateur de fichiers de Windows ne permet pas de rebaptiser des fichiers commençant par des points, il faut donc passer par un éditeur de texte.
Installation
modifierPour autoriser les .htaccess dans le .conf du site, utiliser AllowOverride
[1] :
AllowOverride All
Pour les interdire :
AllowOverride None
Références
modifierServeurs virtuels (virtual hosts)
modifierPrincipe du vhost
modifierApache peut gérer plusieurs sites web simultanément. Ils seront tous accessibles à partir de la même adresse IP et du même port.
Pour les différencier, Apache se sert de l'adresse demandée par le navigateur.
Par exemple si site1.com et site2.com pointent sur la même adresse IP, les URL http://site1.com/ et http://site2.com/ aboutiront sur le même serveur.
Mais au moment de la requête, le navigateur précise qu'il a demandé l'adresse http://site1.com/ ou http://site2.com/.
Apache se sert de cette information pour savoir quel site afficher. On parle de serveur virtuel ou virtual host (vhost).
Configuration
modifierPour indiquer à Apache quel site correspond à un nom de domaine, on utilise une section <VirtualHost *>
.
Sous Debian, il y a généralement un fichier par section VirtualHost
dans le répertoire /etc/apache2/sites-available
.
La section devra contenir une directive ServerName[1] qui indiquera le nom associé à ce serveur virtuel.
Elle pourra également contenir une directive ServerAlias si on veut que d'autres noms aboutissent à ce site.
Par exemple[2] :
- En Windows éditer
C:\Program Files (x86)\EasyPHP\binaries\conf_files\httpd.conf
- En Unix-like :
/etc/apache2/httpd.conf
ou/etc/apache2/apache2.conf
<VirtualHost _default_:80>
ServerAdmin admin@site1.com
DocumentRoot /home/site1/public_html
ServerName site1.com
ServerAlias www.site1.com
</VirtualHost>
<VirtualHost MonIP2:80>
ServerAdmin admin@site2.com
DocumentRoot /home/site2/public_html
ServerName site2.com
ServerAlias www.site2.com
AccessLog /home/site2/access.log
ErrorLog /home/site2/error.log
<Directory /home/site2/public_html>
AllowOverride All
</Directory>
</VirtualHost>
Pour affecter tous les sites et ports, remplacer ceux-ci dans la première balise par *.
En cas d'erreur Apache d'ajouter une "directive" lors de sa relance, ajouter une ligne NameVirtualHost MonIP:MonPort.
La documentation d'Apache sur les serveurs virtuels[3] contient des informations détaillées sur le sujet.
Pour que ce serveur virtuel fonctionne, il est impératif que les noms site1.com et www.site1.com soient connus par la machine qui tente d'y accéder (celle qui lance le navigateur).
Pour cela il y a plusieurs méthodes :
- acheter le nom de domaine en question et le configurer pour qu'il pointe sur la bonne adresse IP
- utiliser un serveur DNS qui renverra la bonne IP pour ce domaine
- modifier le fichier
hosts
sur la machine cliente pour faire correspondre ce domaine à la bonne adresse IP (voir le livre Installation et configuration d'une carte réseau)
Include
modifierPour éviter de copier-coller les mêmes lignes dans plusieurs vhost, il est possible de les inclure avec la directive "include"[4]. Exemple :
Include /etc/apache2/common.conf
ProxyPassMatch
modifierPour utiliser les daemons PHP-FPM (qui écoutent sur le port 9000), Apache doit rediriger les connexions avec ProxyPassMatch[5][6]. Ex :
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/mon_site/$1
Références
modifier- ↑ http://httpd.apache.org/docs/2.2/mod/core.html#servername
- ↑ https://httpd.apache.org/docs/2.4/fr/vhosts/examples.html
- ↑ http://httpd.apache.org/docs/2.2/vhosts/
- ↑ https://httpd.apache.org/docs/2.4/mod/core.html#include
- ↑ https://www.vincentliefooghe.net/content/configuration-apache-24-php-fpm Exemple sur machine hôte
- ↑ http://www.inanzzz.com/index.php/post/su76/creating-apache-mysql-and-php-fpm-containers-for-a-web-application-with-docker-compose Exemple avec Docker
Exemples de configuration
modifierVoici quelques exemples de configuration. L'ensemble des directives possibles peut être consulté ici : http://httpd.apache.org/docs/2.2/mod/directives.html
Pensez que les directives doivent parfois se trouver dans apache2.conf
, parfois dans le contexte VirtualHost
d'un site donné.
ServerType
modifierServerType standalone
Cette ligne indique si le serveur Apache se lance en 'autonome' (standalone) ou via inetd
(TCP_WRAPPER).
Pour la plupart des configuration, c'est en standalone.
Cette directive a disparu de Apache2, qui dispose d'un autre moyen pour définir cela.
Le comportement est en fait choisi d'après le MTM (Multi-processing module) choisi.
ServerRoot
modifierServerRoot /etc/apache2
(config serveur uniquement, pas dans un VirtualHost)
Vous indiquez ici le répertoire d'installation d'Apache. Normalement les scripts d'installation ont bien renseigné cette ligne. Vérifiez quand même.
LockFile
modifierLockFile /var/run/httpd.lock
(config serveur uniquement, pas dans un VirtualHost)
Laissez cette ligne comme elle est, c'est à dire en commenté pour 90% des cas (# devant).
PidFile
modifierPidFile /var/run/httpd.pid
(config serveur uniquement, pas dans un VirtualHost)
Vérifiez bien que cette ligne est décommentée. Elle indique au script de démarrage d'enregistrer le numéro de processus d'Apache pour que lors de l'arrêt du système le processus Apache soit stoppé correctement.
ScoreBoardFile
modifierScoreBoardFile /var/run/httpd.scoreboard
(config serveur uniquement, pas dans un VirtualHost)
Ce fichier stocke des informations pour le bon fonctionnement d'Apache.
Timeout
modifierTimeout 300
(config serveur uniquement, pas dans un VirtualHost)
Temps en secondes avant que le serveur n'envoie ou ne reçoive un timeout . Quand le serveur attend une "réponse" (ex : script CGI, connexion\ldots), si au bout de ce temps, il ne reçoit pas de réponse, il va s'interrompre et prévenir l'utilisateur de l'erreur. Laissez cette valeur par défaut à moins que vous n'effectuiez des traitements dépassant cette limite. Ne pas monter trop haut cette valeur non plus car si le programme externe à "planté", ou si une erreur est survenue, vous risquez de rendre inaccessible le serveur Apache pour trop de temps (il est toujours désagréable d'attendre pour rien).
KeepAlive
modifierKeepAlive on
Autorise ou non les connexions persistantes (plusieurs requêtes par connexions). En fait cela permet aux utilisateurs de votre serveur de lancer plusieurs requêtes à la fois, et donc d'accélérer les réponses du serveur. Laissez cette valeur par défaut la plupart du temps. Pour de petits serveurs laissez cette option sur on . Pour un serveur très sollicité, dès que vous vous apercevez que le système ralentit énormément ou devient indisponible assez souvent, essayez avec la valeur off . Mais avant, essayez de baisser la valeur de l'option suivante.
MaxKeepAliveRequests
modifierMaxKeepAliveRequests 100
En combinaison avec l'option précédente, indique le nombre de requêtes pour une connexion. Laissez cette valeur assez haute pour de très bonnes performances. Si vous mettez 0 comme valeur, vous en autorisez en fait un nombre illimité (attention donc). Laissez la valeur par défaut là aussi.
KeepAliveTimeout
modifierKeepAliveTimeout 15
Valeur d'attente en secondes avant la requête suivante d'un même client, sur une même connexion, avant de renvoyer un timeout. Là aussi laisser la valeur par défaut.
MinSpareServers & MaxSpareServer
modifierMinSpareServers 5 MaxSpareServers 10
(config serveur uniquement, pas dans un VirtualHost)
Ces valeurs servent à l'auto-régulation de charge du serveur.
En fait le serveur Apache contrôle lui même sa charge, suivant le nombre de clients qu'il sert et le nombre de requêtes que demandent chaque client.
Il fait en sorte que tout le monde puisse être servi et ajoute tout seul un certain nombre d'instances Apaches "idle", c'est-à-dire qui ne font rien, mais sont prêtes à servir de nouveaux clients qui se connecteraient.
Si ce nombre est inférieur à MinSpareServers
il en ajoute une (ou plusieurs).
Si ce nombre dépasse la valeur de MaxSpareServer
il en arrête une (ou plusieurs).
Ces valeurs par défaut conviennent à la plupart des sites.
Listen
modifierListen 3000 Listen 12.34.56.78 Listen 12.34.56.78:3000
Indique au serveur des ports ou des adresses IP (il y en a une par interface réseau du serveur!), ou les deux, où il doit "écouter" les demandes de connexions, EN PLUS de l'adresse et port par défaut.
Voir la directive VirtualHost
plus loin.
BindAdress
modifierBindAdress *
Redondant avec Listen
, cela permet de spécifier des adresses IP d'interfaces réseau, pour écouter les requêtes.
Cette directive a disparu dans Apache 2.
Port
modifierPort 80
Redondant avec Listen
, cela permet de spécifier le port d'écoute (80 par défaut).
Cette directive a disparu dans Apache 2.
LoadModule, ClearModuleList & AddModule
modifierLoadModule xxxxxx.mod libexec/yyyyyy.so ClearModuleList AddModule zzzz.c
(config serveur uniquement, pas dans un VirtualHost)
Support pour les modules DSO (Dynamic Shared Object). LoadModule
permet de charger un module.
Avant Apache 2, les directives ClearModuleList
et AddModule
permettaient de spécifier l'ordre d'exécution des modules, à cause de problèmes de dépendances.
Apache 2 peut maintenant faire cela automatiquement, car les APIs de modules leur permet de spécifier eux-mêmes leur ordre.
Sous Apache 1.*, il faut cependant y prêter une grande attention, et le maintenir à jour à l'ajout de tout nouveau module.
ExtendedStatus
modifierExtendedStatus on
(config serveur uniquement, pas dans un VirtualHost)
Indique si le serveur doit renvoyer des informations complètes de statut (on ) ou des informations réduites (off ). off par défaut. Laissez cette valeur par défaut sauf en cas de développement et de debuggage.
User & Group
modifierUser nobody Group nobody
Une fois le serveur démarré, il serait dangereux de lui laisser les droits root
pour répondre aux requêtes.
Il est donc possible de modifier l'utilisateur et le groupe du processus pour lui donner un minimum de droits sur la machine du serveur. (En fait si quelqu'un arrive à "exploiter" votre serveur, par exemple s'il arrive à faire exécuter du code par le serveur Apache, il hérite des droits du serveur lui même.
Donc si c'est nobody
il n'a aucun droit spécifique.
Si c'est root
ou un utilisateur réel, il aura alors des droits lui permettant d'endommager votre système.)
ServerAdmin
modifierServerAdmin root@localhost.domainname
Adresse e-mail de l'administrateur du site. Cette adresse est affichée par le serveur par exemple en cas d'erreur, pour que les utilisateurs puissent en avertir l'administrateur.
ServerName
modifierServerName www.domainname
Adresse que le serveur va renvoyer au client web. Il est préférable de mettre une adresse résolue par DNS au lieu du nom de la machine réelle, pour que les visiteurs ne voient pas le nom réel de votre machine (utile pour la sécurité aussi).
DocumentRoot
modifierDocumentRoot /var/lib/apache/htdocs
Répertoire racine ou se trouve vos pages Web.
Directory
modifier<Directory /var/lib/apache/htdocs> Options Indexes FollowSymlinks Multiviews AllowOverride None Order allow,deny Allow from all </Directory>
Change les paramètres du repertoire /var/lib/apache/htdocs
.
On peut placer à l'intérieur les directives suivantes :
Options
modifieron définit les options pour ce répertoire. Les options possibles sont les suivantes :
None | Désactive toutes les options. |
All | Active toutes les options SAUF Multiviews. |
Indexes | Permet aux utilisateurs d'avoir des indexs généré par le serveur.
C'est à dire si l'index du répertoire ( |
FollowSymLinks | Autorise a suivre les liens symboliques. |
ExecCGI | Autorise à exécuter des scripts CGI à partir de ce répertoire. |
Includes | Autorise des fichiers include pour le serveur. |
IncludesNOEXEC | Permet mais les includes mais empêche la commande EXEC (qui permet d’exécuter du code). |
MultiViews | Autorise les vue multiples suivant un contexte.
Par exemple permet d'afficher les pages dans un langage suivant la configuration du langage du client. |
SymLinksIfOwnerMatch | Autorise a suivre les liens seulement si l'user ID du fichier (ou répertoire) sur lequel le lien pointe est le même que celui du lien. |
AllowOverride
modifierdéfinit comment sont gérés les fichiers .htaccess de ce répertoire :
All | Gère tout ce qui est dans .htaccess |
AuthConfig | Active les directives d'autorisations AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, etc. |
FileInfo | Active les directives contrôlant le type de document (ErrorDocument, LanguagePriority, etc.) |
Limit | Active la directive d'autorisation Limit |
None | Ne lit pas le fichier .htaccess et laisse les droits "Linux" de ce répertoire. |
Options | Active la directive Option |
Order
modifierDonne l'ordre d'application des règles Allow/Deny :
deny,allow | Si le client ne correspond à aucune règle deny , mais correspond à une règle allow , alors on autorise (allow par défaut). |
allow,deny | Si le client ne correspond à aucune règle allow , mais correspond à une règle deny , on interdit (deny par defaut).\hline |
Allow/Deny
modifierNom d'hôte | Autorise/Refuse les hôtes spécifié, les adresses IP, le nom de domaine, etc... |
All | Autorise/Refuse tout le monde |
À vous de placer vos règles suivant le contenu de vos répertoire accessibles par le Web. Il existe les mêmes règles pour les fichiers (<Files> </Files>) et les locations (<Location> </Location>). Voir un exemple pour les fichiers (file) plus bas.
DirectoryIndex
modifierDirectoryIndex index.html index.htm index.php index.php5
Indique le ou les fichiers à charger lorsqu'on accède à un répertoire sans préciser de fichier. Dans cet exemple, si on accède à http://example.com/repertoire/, Apache cherchera un des fichiers mentionnés (index.html, index.htm...) et s'il en trouve un il l'affichera. S'il n'en trouve pas, il affichera la liste des fichiers ou interdira l'accès (suivant la présence ou non de l'option Indexes sur le répertoire).
AccessFileName
modifierAccessFileName .htaccess
Nom du fichier des règles d'accès pour les règles AllowOverride. Un conseil: placez comme vu précédemment une règle file du style:
<Files .ht*> #pour interdire aux visiteurs de voir le contenu des Order allow,deny #fichiers .ht qui contiennent les règles de Deny from all #sécurité. </Files>
CacheNegotiatedDocs
modifier#CacheNegotiatedDocs
Autorise ou pas les proxies à mettre en cache les documents (pour autoriser, enlevez le commentaire # en début de ligne)
UseCanonicalName
modifierUseCanonicalName On
Placé sur on , réécrit l'URL par rapport aux valeurs Server
et Port
spécifiées plus haut dans le fichier httpd.conf.
Sur off , l'URL reste celle donnée par le client.
Attention, mettez sur on si vous utilisez des CGI avec des variables SERVER_NAME, car si l'URL du client n'est pas la même que celle du CGI, votre script CGI ne marchera pas.
DefaultType
modifierDefaultType text/plain
Type mime par défaut que le serveur renvoie au clients. Convient dans la plupart des cas.
HostNameLookups
modifierHostNameLookups off
Sur on , le serveur le nom du client grâce à une requête DNS inverse. Sinon, il se contente de l'adresse IP, ce qui génère beaucoup moins de trafic réseau.
ErrorLog
modifierErrorLog /var/log/error_log
Chemin complet du fichier où les erreurs seront enregistrées.
LogLevel
modifierLogLevel warn
Niveau d'enregistrement des erreurs avec comme valeurs possibles, par ordre décroissant d'importance, donc croissant en bavardage:
emerg |
urgence : le serveur devient inutilisable |
alert |
une intervention est nécessaire |
crit |
erreurs critiques (accès réseau impossible par exemple) |
error |
les erreurs dans les pages, scripts |
warn |
les erreurs non bloquantes (pages mal codées, scripts comportant des erreurs non blocantes... |
notice |
événement normal mais méritant d'être remarqué |
info |
informations utiles (comme "serveur très chargé") |
debug |
Enregistre TOUT ce qui peut se passer sur le serveur |
Le niveau crit
est le minimum recommandé, et on monte généralement à warn
.
ServerSignature
modifierServerSignature on
on |
ajoute la signature (version, OS…) du serveur lorsqu'il génère des pages lui-même (index manquant, erreur de script, etc.) |
off |
ne montre que l'erreur. |
email |
ajoute un lien vers l'email définit par ServerAdmin
|
Alias
modifierAlias faux_nom nom_réel
permet de faire des alias de répertoires (des liens en quelque sorte) (similaire à ScriptAlias /cgi-bin chemin_complet_des_cgi
AddType
modifierAddType type extensions
(sous Apache2, cette directive devrait être dans un fichier mods-availabe/nom_module.conf
, au lieu de apache2.conf
)
Spécifie que des fichiers utilisant de telles extensions sont du type précisé.
Cela permet de décider quoi en faire.
Pour ajouter le support PHP, le fichier mods-enabled/php5.conf
contient par exemple :
AddType application/x-httpd-php .php .phtml .php3 AddType application/x-httpd-php-source .phps
AddHandler
modifierAddHandler cgi-script .cgi
Pour utiliser les scripts CGI.