Créez votre propre serveur Apache

 · Temps de lecture: 6 mins

Créez votre propre serveur Apache2

Apache2 est un autre serveur HTTP bien connu de tous qui alimente de nombreux sites web (comme le nôtre, avant que nous passions à Nginx) et d’autres applications web (comme les proxy inverses) qui est très facile à configurer. Avec sa modularité d’installation, sa facilité de configuration et la possibilité d’avoir plusieurs utilisateurs qui ont chacun leur site Apache2, il s’agit d’un logiciel de choix pour les hébergeurs mutualisés contrairement à Nginx qui lui vise la rapidité.

Exigences

  • Un ordinateur ou un serveur avec une distribution Linux (recommandé : Ubuntu, Debian, CentOS, RedHat)
  • Si cette dernière est configurée depuis un emplacement distant, un client SSH
  • Un nom de domaine pointé vers le serveur web, sinon ce dernier ne sera pas facilement accessible sur le web ouvert.

Options

  • Un client SCP qui permet graphiquement de manipuler les fichiers
  • Un certificat SSL/TLS prêt à être installé

1. Préparez votre serveur

(Les commandes de notre guide sont pour la distribution Debian) Tout d’abord, vous devez SSH dans votre serveur web. Une fois dedans, nous pouvons commencer la procédure, mais avant de commencer il est impératif de s’assurer qu’il n’y a aucune trace de Apache (toutes versions) avant sa configuration.

sudo apt-get purge -- auto-remove apache
sudo apt-get clean
sudo apt-get update && sudo apt-get upgrade

Vérifiez ensuite d’aucun autre serveur web n’écoute sur les ports 80 et 443:

sudo netstat -plunt

S’il y en a, vous devez changer leur configuration pour écouter les autres ports, ou les déinstaller.

2. Installez Apache

Une fois que toutes les étapes préliminaires sont franchies, nous pouvons maintenant mettre en place Apache2:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2

Cet ensemble de commandes vous permettra de configurer la version par défaut de Apache2 fournie par la source principale du logiciel de votre distribution. Si vous souhaitez mettre en place une version plus à jour, n’hésitez pas à compiler Apache2 à partir des sources ou ajouter les dépôts de Apache à votre liste de sources.

3. Configurez Apache2

sudo nano /etc/apache2/apache2.conf

La configuration est déjà présente et complète. Nous vous recommandons de la garder intacte, car elle est déjà adaptée à votre système. Malgré cela, il vaut mieux que vous l’inspectiez car il vous sera nécessaire de la connaître en cas de problème.

4. Inspectez ports.conf

sudo nano /etc/apache2/ports.conf

Ce fichier contient par défault les ports que Apache2 doit écouter. Par défault, il écoute aux ports 80 et 443, et supporte IPv4 et IPv6. Même si votre serveur ne supporte pas IPv6, il est recommandé de le garder dans Apache2 car IPv6 sera toujours en premier entre applications dans un même hôte local.

5. Configurer son site

Comparativement à Nginx, Apache2 est bien plus facile pour configurer son site.

Apache fonctionne en blocs comme Nginx, mais contrairement à Nginx où il faut faire des blocs server, Apache nécessite des blocs VirtualHost. C’est très équivalent. Contrairement à Nginx où on a le choix de faire des configurations centralisées (sur seulement nginx.conf) ou décentralisées (ex: utiliser sites-enabled) Apache ne peut être que décentralisé (au point où ceci devient un avantage pour l’hébergeur mutuel) Ainsi, voici un exemple de configuration de site Apache:

<VirtualHost *:80>
	# remplacer par votre nom de domaine
	ServerName www.domaine.com
	ServerAlias domaine.com
	# mettre votre adresse e-mail
	ServerAdmin [email protected]
	# spécifier l'emplacement de votre site sur le serveur local
	DocumentRoot /var/www/html/domaine.com
	# spécifier des emplacements pour les logs du site en cas d'erreur
	ErrorLog /emplacement/vers/fichier.log
	CustomLog /emplacement/vers/fichier.log
	# spécifier les règles d'accès
	Options FollowSymLinks
	AllowOverride All # ici activer la possibilité de faire des paramètres par site .htaccess et .htpasswd
	Order allow,deny
	Allow from all
	Satisfy all
</VirtualHost>

Cette configuration est pour un site HTTP normal sans SSL. Pour SSL/TLS, il suffit de rajouter un autre bloc VirtualHost:

<VirtualHost *:443>
	... # reprenez la configuration du haut et collez l'INTÉRIEUR du bloc virtualhost 80 ici
	SSLEngine on
	SSLCertificateFile /path/to/signed_certificate
	SSLCertificateChainFile /path/to/intermediate_certificate
	SSLCertificateKeyFile /path/to/private/key

	# Uncomment the following directive when using client certificate authentication
	#SSLCACertificateFile /path/to/ca_certs_for_client_authentication


	# HSTS (mod_headers est nécessaire) (15768000 seconds = 6 months)
	Header always set Strict-Transport-Security "max-age=15768000"

	# Configuration intermédiaire de sécurité par Mozilla changez par rapport à vos besoins
	SSLProtocol all -SSLv2 -SSLv3
	SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
</VirtualHost>

6. Créer un certificat SSL

Ignorez cette étape si vous disposez déjà d’un certificat SSL de n’importe quelle autorité de certification (COMODO, GoDaddy, Certum, DigiCert, Symantec…).

Rendez-vous sur sslforfree.com pour obtenir un certificat SSL de Let’s Encrypt.

Entrez *.domaine.com et domaine.com et cliquez sur “Create free SSL certificate”.

Cliquez ensuite sur “Manual verification” et vous obtiendrez des records DNS que vous entrerez chez votre registrar dans les paramètres DNS. Une fois fait, Cliquez sur “Verify _acme-challenge.domaine.com” et les deux records devraient apparaître. Sinon, attendez le nombre de secondes spécifié dans le TTL (mettez le au minimum dans votre gestionnaire DNS, c’est important, car parfois il faut attendre jusqu’à 12 heures si vous l’avez mal configuré).

Une fois que les deux records sont apparus, cliquez sur Download SSL certificate et vous serez menés à une page avec 3 zones de texte. Il s’agit de votre certificat. Vous pourrez ensuite l’installer dans votre chemin vers les certificats SSL tels que spécifiés dans votre configuration Nginx.

Mettez la clé privée dans un fichier private.key dans le même dossier dans le chemin d’accès tel que spécifié dans votre configuration Apache. Pareil pour le certificat et pour le CA Bundle (contrairement à Nginx, Apache les veut dans 2 certificats différents).

Faites de même pour tous les sites que vous voudriez avoir à côté de celui-ci.

Copiez le certificat de votre site le plus important dans le dossier du certificat SSL par défaut ou créez un nouveau certificat SSL qui couvre tous les domaines. Il y a une limite théorique de 255 SAN qui varie en pratique selon les autorités de certification.

Une fois tout cela fait…

7. Activez votre site et redémarrez Apache

sudo a2ensite votre-nom-de-fichier-pour-la-config && sudo systemctl restart nginx

Désormais votre site marche!

8. .htaccess

Ci-dessus nous avions décrit comment faire la configuration initiale de son site. Il existe cependant un autre outil: .htaccess. Il permet de faire des modifications à Apache2 sans le redémarrer et se place à la racine de votre DocumentRoot. Il s’agit de l’emplacement où vous configurez des options comme Options -Indexes pour cacher l’index de fichiers, ou configurer les .htpasswd pour demander un mot de passe pour accéder au site. .htaccess n’est pas dédié rien qu’aux configurations supplémentaires pour Apache - c’est aussi le parfait endroit pour ajouter des instructions pour d’autres logiciels qui interagissent avec Apache2, comme PHP-FPM.


Écrit par Rémy Samkocwa