Le système d'exploitation GNU-Linux/Le serveur Web Apache
|
Une proposition de fusion est en cours entre Apache et Administration réseau sous Linux/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|Administration réseau sous Linux/Apache}} |
---|---|---|
2. | Important : ajoutez une section dans Pages à fusionner en motivant votre proposition. | Utilisez ce texte :
== [[Apache]] et [[Administration réseau sous Linux/Apache]] == |
3. | Pensez à informer le(s) contributeur(s) principal(ux) de la page. | Utilisez ce texte :
{{subst:Avertissement fusion|Apache|Administration réseau sous Linux/Apache|7=~~~~}} |
Installation de Apache2
[modifier | modifier le wikicode]LAMP
[modifier | modifier le wikicode]Logiciel tout-en-un pour Linux (Apache + MySQL + PHP), comme WAMP pour Windows.
# apt-get install tasksel
# tasksel install lamp-server
Installation manuelle
[modifier | modifier le wikicode]Apache sur Debian / Ubuntu
[modifier | modifier le wikicode]# 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
[modifier | modifier le wikicode]On 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
[modifier | modifier le wikicode]Pour 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
[modifier | modifier le wikicode]Voici 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
[modifier | modifier le wikicode]Pour é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
[modifier | modifier le wikicode]Premiè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
[modifier | modifier le wikicode]MySQL 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 | modifier le wikicode]$ sudo apt-get install mysql-server mysql_secure_installation
Variante
[modifier | modifier le wikicode]La 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
[modifier | modifier le wikicode]emerge mysql
Modules
[modifier | modifier le wikicode]De 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
[modifier | modifier le wikicode]Pour 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
[modifier | modifier le wikicode]Si 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)
[modifier | modifier le wikicode]Cherchez 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
[modifier | modifier le wikicode]Il 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 !
Configuration de Apache2
[modifier | modifier le wikicode]Le fichier de configuration principal de Apache2 est /etc/apache2/apache2.conf. Dans le cas de Apache version 1.3, ce fichier s'appelle /etc/apache/httpd.conf.
Par défaut, Apache utilise deux fichiers de logs :
- /var/log/apache2/access.log : contient les logs de connexion au serveur Web
- /var/log/apache2/error.log : contient les erreurs survenues
Dans les fichiers de configuration /etc/apache2/apache2.conf ou /etc/apache2/conf.d/security, on peut être amené à modifier :
# Pour que Apache ne donne pas son numéro de version et les modules chargés (via une page d'erreur) ServerSignature off # Pour que Apache ne donne pas son numéro de version et les modules chargés (via le protocole HTTP) ServerTokens Prod # Permet d'enregistrer les noms canoniques au lieu des adresses IP # dans le fichier access.log HostnameLookups On
Le fichier /etc/apache2/ports.conf contient la liste des ports sur lequel Apache écoute. On peut changer le port le par défaut (80), ou lui indiquer d'écouter sur d'autres ports (ex: 443 pour https) en rajoutant des lignes Listen <port>.
# cat /etc/apache2/ports.conf Listen 80
Héberger plusieurs sites Internet
[modifier | modifier le wikicode]Apache permet de gérer plusieurs sites internet sur le même serveur, pour cela on va utiliser des sections VirtualHost. Pour chaque site Internet, on crée un nouveau fichier dans /etc/apache2/sites-enabled et on lui indique la section VirtualHost (voir ci-dessous). Par convention, on appelle ce fichier avec le nom du site Internet :
# cd /etc/apache2/sites-enabled # vi www.mondomaine.fr # Ne mettre cette ligne que dans UN seul fichier NameVirtualHost 192.168.30.220 <VirtualHost 192.168.30.220> ServerName www.mondomaine.fr ServerAlias mondomaine.fr ServerAdmin webmaster@mondomaine.fr DocumentRoot /var/www/www.mondomaine.fr CustomLog /var/log/apache2/www.mondomaine.fr_access.log combined ErrorLog /var/log/apache2/www.mondomaine.fr_error.log </VirtualHost>
Les différents sites vont être stockés dans le répertoire /var/www.On va créer un sous-répertoire par site :
# cd /var/www # mkdir www.mondomaine.fr
Afin de tester, on crée une page HTML minimale :
# echo "<html><body>www.mondomaine.fr</body></html>" > /var/www/www.mondomaine.fr/index.html
Après toutes modifications des fichiers de configuration, on relance Apache2 avec la commande suivante :
# /etc/init.d/apache2 restart
On peut tester avec son navigateur en se connectant à l'URL suivante :
http://www.mondomaine.fr
Dans cet exemple, il faut bien entendu que www.mondomaine.fr pingue vers notre serveur. On peut simuler ceci en rajoutant une entrée dans le fichier /etc/hosts ou en modifiant le DNS.
Installer des modules supplémentaires
[modifier | modifier le wikicode]Apache 2 permet l'installation de nombreux modules pour offrir plus de services ou pour renforcer la sécurité.
Les modules sont dans le répertoire /etc/apache2/mods-available . C'est ici qu'il faut copier les modules additionnels que vous pourrez télécharger pour Apache.
Pour activer un module on peut créer manuellement un lien symbolique dans le répertoire mods-enable
Par exemple pour activer le mod URL Rewriting
# ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Une alternative consite à utiliser la commande a2enable / a2disable
# a2enable mod_rewrite // Active le mod_rewrite dans apache2
# a2disable mod_rewrite // Désactive le mod_rewrite dans apache2
NB : sur les dernières versions de apache2, ces deux commandes s'appellent respectivement a2enmod et a2dismod.
Protéger un répertoire avec un login / mot de passe
[modifier | modifier le wikicode]Pour protéger un répertoire avec un login et un mot de passe, on crée dans le répertoire à protéger un fichier .htaccess qui contient le code suivant :
# cd /var/www/www.mondomaine.fr # vi .htaccess # Type d'authentification AuthType Basic # Nom affiché dans la boite d'authentification AuthName "Site personnel" # Emplacement du fichier contenant les utilisateurs AuthUserFile /etc/apache2/utilisateurs # Emplacement du fichier contenant les groupes AuthGroupFile /etc/apache2/groupes # On autorise seulement les membres du groupe admin Require group admin
On crée ensuite le fichier /etc/apache2/utilisateurs à l'aide de la commande htpasswd :
# cd /etc/apache2 # htpasswd -c utilisateurs alex ... # htpasswd utilisateurs pierre
La première fois, on utilise l'option -c de la commande htpasswd pour créer le fichier.
On crée ensuite le fichier /etc/apache2/groupes :
# echo "admin: alex pierre" > /etc/apache2/groupes
Il faut également éditer le fichier /etc/apache2/sites-enabled/000-default afin d'activer la prise en charge du fichier htaccess. Ajouter, si cela n'existe pas encore :
<Directory /var/www/mondossierprotege/> AllowOverride All </Directory>
On relance le serveur web :
# /etc/init.d/apache2 restart
Outils pour générer des statistiques de connexion
[modifier | modifier le wikicode]Chaque fois qu'un visiteur vient sur le site Internet, Apache enregistre sa connexion dans les fichiers /var/log/apache2/*_access.log.
Voici deux logiciels libres qui analysent ces fichiers et qui permettent de générer des statistiques sur les connexions :