Ceci est une ancienne révision du document !



 Logo du logiciel Apache 2

Serveur HTTP Apache 2

Apache est l'un des serveurs web les plus utilisés. Il est produit par la « Apache Software Foundation ». C'est un logiciel libre fourni sous la licence spécifique Apache, licence (en).

Les références à prendre en compte pour comprendre la configuration d'Apache, sont la documentation officielle et les ressources présentes sur votre système : /usr/share/doc/apache2/README.Debian.gz notamment ainsi que les pages de manuel.

  • Quelques connaissances de base des protocoles HTTP, les noms de domaine et le DNS et les réseaux IP ;
  • Un réseau local en état de marche (IP attribuées, connexion à l'Internet) ;
  • Un nom de domaine pleinement qualifié (ou à défaut la possibilité de gérer un pseudo domaine localement).

Installation de base

Installez le paquet apache2.

À la suite de cette installation votre serveur doit fonctionner et être accessible à l'adresse suivante http://localhost (à partir de la même machine).

Un beau message va s'afficher dans votre navigateur It Works, c'est le contenu du fichier /var/www/html/index.html (configuration par défaut)

Si vous voulez installer une pile LAMP complète consultez la page LAMP

Les fichiers de configuration

Tous les fichiers de configuration de Apache2 sont dans le dossier /etc/apache2.
Rendez-vous dans le répertoire /etc/apache2/, et regardez les fichiers le composant :

apache2.conf  ports.conf   envvars   mods-available  mods-enabled  conf-available conf-enabled sites-available  sites-enabled

La plupart de ces fichiers sont plus ou moins spécifiques à Debian/Ubuntu et nous permettent de séparer la configuration en plusieurs parties.

  • envvars est utilisé pour définir des variables d'environnement propres à Apache ;
  • ports.conf contient la directive listen qui spécifie les adresses et les ports d'écoute ;
  • apache2.conf est le fichier principal de configuration c'est à partir de lui que tous les autres fichiers sont chargés ;
  • conf-available contient un ensemble d'éléments de configuration globale (charset, security, etc.) ;
  • conf-enabled contient les éléments de configuration globale activés ;
  • mods-available contient la liste des modules d'apache installés ;
  • mods-enabled celle des modules activées ;
  • sites-available contient la liste des hôtes virtuels installés ;
  • sites-enabled celle des hôtes virtuels activées.
Normalement les fichiers de configuration globale apache2.conf, envars et ports.conf n'ont pas à être modifiés. Toute la configuration devrait se faire dans les sous dossiers xxx-available.

Les dossiers xxx-available contiennent les éléments de configuration disponibles. Les dossiers xxx-enabled contiennent les éléments de configurations activés sous forme de liens symboliques pointant vers les fichiers correspondant dans le dossier xxx-available.

Il est fortement déconseillé d'intervenir dans les dossiers xx-enabled. Les fichiers doivent être crées ou modifiés dans les dossiers xxx-available et les configurations activées ou désactivées comme suit :

sudo a2enconf charset.conf
sudo a2disconf charset.conf

pour activer ou désactiver un élément de configuration globale.

sudo a2enmod rewrite
sudo a2dismod rewrite

pour activer ou désactiver un module Apache.

sudo a2enconf monhote.conf
sudo a2disconf monhote.conf

pour activer ou désactiver un hôte virtuel.

Configuration des interfaces

La spécification des interfaces sur lesquelles Apache2 écoutera les requêtes se fait dans ports.conf avec la directive Listen.
La configuration par défaut indique que le serveur est en écoute sur le port 80 pour toutes les interfaces réseau, et sur le port 443 si le module SSL ou GNUTLS est activé :

Listen 80

<IfModule ssl_module>
	Listen 443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 443
</IfModule>

Pour restreindre l'utilisation à une ou plusieurs interfaces il suffit de les spécifier, suivies du port. Il faut une directive Listen par interface.
- Si le serveur est connecté avec une IP Internet et que l'on souhaite écouter sur cette interface on ajoute la directive Listen IP.Internet .
- Si le serveur est connecté avec une IP locale et que l'on souhaite écouter sur cette interface on ajoute la directive Listen IP.Locale .
- Si l'on souhaite écouter sur un certain port on rajoute :Le_Port . Il est aussi possible de ne spécifier que le port Listen Le_Port.

Éditez le fichier /etc/apache2/ports.conf.(remplacer les X.X.X.X par l'ip de l 'interface d'écoute )

 #interface (local ou internet) connectée sur port standard
 Listen X.X.X.X:80

Après modification vous devrez recharger la configuration d'Apache :

sudo systemctl reload apache2

Configurer un site web

Pour configurer un ou plusieurs sites web différents, il faut utiliser les hôtes virtuels (ou vhosts). Chaque hôte virtuel a son propre fichier de configuration. Ceci permet de définir plusieurs sites sur une même machine avec des noms de domaines différents (www.example.com, machin.example.com, autredomain.tld…).

Si vous voulez utiliser plusieurs hôtes virtuels voir virtualhosts_avec_apache2

Ouvrez le fichier /etc/apache2/sites-available/000-default.conf (le seul hôte virtuel existant pour le moment).

# Le vhost proprement dit : il est compris dans un bloc <VirtualHost>,
# Ces blocs définissent la "portée" de la validité des directives qui y sont définies.
# Le * derrière VirtualHost définit ici que le vhost est valable pour toutes les IP sur lesquelles apache écoute.
<VirtualHost *:80>
# ServerName définit le nom de domaine pleinement qualifié utilisé pour le vhost.
ServerName www.example.com
# ServerAlias définit les autres domaines pour lesquels l'hôte virtuel répondra.
ServerAlias example.com
# ServerAdmin vous permet de spécifier le courriel à utiliser en cas de problème, sur une page d'erreur 404 par exemple.
ServerAdmin webmaster@example.com
# DocumentRoot définit le dossier racine dans lequel seront stockés les fichiers du site.
DocumentRoot /srv/web/example.com/www
        # Directory définit les options par défaut du répertoire
	<Directory /srv/web/example.com/www>
                # Active les options :
                # FollowSymLinks permet de suivre les liens symboliques.
                # Indexes autorise le listage de fichiers d'un répertoire qui ne contient pas d'index (désactivé ici).
		Options -Indexes +FollowSymLinks +MultiViews
                # AllowOverride permet de surcharger certaines options en utilisant des fichiers .htaccess dans le répertoire du site.
		AllowOverride all
                # Droits d'accès (on autorise tout le monde)
		Require all granted
	</Directory>
       # Où sont enregistré les logs. Il est important d'avoir des logs séparés pour chaque hôte virtuel.
	ErrorLog /var/log/apache2/error.example.com.log
	CustomLog /var/log/apache2/access.example.com.log combined
</VirtualHost>

Enregistrez les changements sous un autre nom (ex: example.com.conf).

Il faut maintenant activer l'hôte virtuel. Pour cela il faut créer un lien symbolique du fichier de sites-available/ vers sites-enabled/.
En utilisant :

sudo a2ensite example.com.conf

Pour désactiver un site, utiliser

sudo a2dissite example.com.conf

Après modification, activation ou désactivation il faut recharger la configuration d'Apache :

sudo systemctl reload apache2

Si vous n'avez pas de nom de domaine pleinement qualifié, vous pouvez utiliser un nom de votre choix, par exemple : projet1 comme valeur de la directive ServerName. Il faudra ensuite ouvrir le fichier /etc/hosts et ajouter une ligne avec le nom que vous avez choisi :

127.0.0.1 projet1

Cela permettra à votre système de faire la correspondance entre le nom de l'hôte et votre machine locale, et votre site sera accessible localement avec http://projet1

Utiliser le protocole HTTPS avec Apache

Le protocole HTTPS permet de chiffrer les échanges entre le serveur et le client grâce à TLS.

Consultez la page Utiliser HTTPS avec Apache2

Droits d'accès sur les fichiers et dossiers du site

Pour qu'Apache fonctionne avec un site présent dans le dossier /srv/web/example.com/www, il faut que l'utilisateur www-data puisse au moins lire les fichiers et accéder aux dossiers qui s'y trouvent. Si l'on veut que cela fonctionne quel que soit le propriétaire/groupe des fichiers et dossiers du site, il faut s'assurer que l'ensemble des dossiers aient des droits en lecture et en accès pour tout le monde (r-x) et les fichiers en lecture pour tout le monde (r–).

Exemple de commande pour donner les droits en lecture à tout le monde sur l'arborescence /srv/web/example.com/www :

sudo chmod -R +rX /srv

La question du propriétaire et groupe des fichiers, et des droits pose fréquemment problème aux débutants. C'est une question complexe qui n'a pas de réponse universelle. Tout dépend de l'usage du serveur (test, développement, production, multi-sites ou pas, niveau de sécurité acceptable, etc.) etles solutions devront être adaptées à chaque cas.

Pour arrêter apache2 :

sudo systemctl stop apache2

Pour lancer apache2 :

sudo systemctl start apache2

Pour relancer apache2 :

sudo systemctl restart apache2

Pour recharger la configuration d'apache2 :

sudo systemctl reload apache2

Pour voir la version d'Apache utilisée :

sudo apache2ctl -v

Pour tester l'ensemble de la configuration d'Apache :

sudo apache2ctl -t

Pour tester la configuration des hôtes virtuels :

sudo apache2ctl -t DUMP_VHOSTS

Pour voir les modules d'Apache chargés :

sudo apache2ctl -M

Erreur au démarrage

Au démarrage d'Apache, il est possible que celui-ci ne soit pas capable de déterminer un nom de domaine. Ce message sera affiché dans le terminal :

Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Pour corriger l'erreur il suffit de renseigner la directive ServerName dans l'hôte virtuel par défaut (/etc/apache2/sites-available/000-default.conf). Exemple :

ServerName localhost

Puis de recharger la configuration d'Apache.

Il est possible d'ajouter ou supprimer des modules à apache, ajoutant des fonctionnalités à votre serveur web. Tous les modules sont répertoriés ici : /etc/apache2/mods-available Ces modules sont nombreux, aussi nous n'en montrerons qu'un seul pour l'exemple.

Activer la ré-écriture des URL

Chargez le module rewrite :

sudo a2enmod rewrite

Ensuite, deux possibilités s'offrent à vous suivant vos capacités de gestion de votre serveur :

  • pour un serveur mutualisé par exemple : placer un fichier .htaccess avec des règles de ré-écriture à la racine de votre site. Pour cela les fichiers .htaccess doivent être autorisés par la directive Allowoverride.
  • pour un serveur dédié ou un serveur personnel (sur votre propre distribution) il est conseillé d'ajouter les règles de ré-écriture directement dans le fichier de configuration de l'hôte virtuelm en recopiant les lignes suivantes à la fin dudit fichier.

Un petit exemple :

RewriteEngine on

# Lorsque l'on tape dans la barre d'adresse www.example.com/page-* c'est la page www.example.com/page.php?id=* qui s'affiche
# ^ et $ signifie respectivement le début et la fin d'une expression régulière
RewriteRule ^page-([0-9]+)$ /page.php?id=$1 [L]
Méthode déconseillée pour un serveur en production !

<note>Dans le cas d'un ordinateur de bureau, apache est souvent utilisé de façon occasionnelle pour développer et tester en local.

Bien qu'apache consomme peu de ressources, our les amoureux de l'écologie c'est de l'énergie gaspillée sans raison valable. Pour les machines à faibles ressources, apache diminue la vitesse de démarrage

Pour désactiver le démarrage automatique du service apache2 : <code>sudo systemctl disable apache2</apache> Pour vérifier si service apache2 est activé : <code>sudo systemctl is-enabled apache2</apache>

Pour supprimer cette application, il suffit de :

  • supprimer les paquets. Vous devez supprimer tous les paquets que vous avez installés. La configuration de l'application sera conservée ou supprimée selon la méthode de désinstallation que vous choisirez ('sudo apt-get purge [paquet]' pour virer les configs et les fichiers, 'sudo apt-get remove [paquet]' pour garder la config.)
  • apache2.1520775335.txt.gz
  • Dernière modification: Le 11/03/2018, 14:35
  • par krodelabestiole