2018-06-15

Quelques moments d’attente


Vous avez probablement remarqué que notre site web a régulièrement cessé de fonctionner pour quelques instants depuis les 2 dernières semaines.

C’est normal, nous travaillons sur l’implémentation de plusieurs nouvelles fonctions et opérations de maintenance sur notre serveur:

Ainsi, nous n’avions pas pu écrire d’articles journaliers durant cette période…

Nous nous excusons de cet inconvénient…

Était-ce la vraie vocation de cet article?

Certainement pas.

Quelques moments d’attente / faire un vrai site web complet et rapide


Implémenter un bon site web sans aucun problème de temps de chargement peut être une dure affaire… Surtout lorsque l’on implémente un site dynamique en PHP comme WordPress, Joomla ou tout engin de sites web sur les systèmes d’autoinstallateurs de scripts comme Fantastico, Installatron ou Softaculous..

Il est ainsi nécessaire d’avoir une configuration optimale! Nous allons ainsi utiliser un serveur Apache2 sur Debian ou Ubuntu pour y monter un site web, avec aussi la meilleure sécurité possible et tous les outils utiles inclus dans Apache.

Ainsi, nous devons commencer par installer Apache2 dans notre serveur web.

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install apache2 apache2-doc apache2-utils

Ainsi nous nous retrouvons avec une installation vierge d’Apache2. Cependant, vous devez savoir que:

Nous allons commencer par correctement définir la page par défaut, pour vous éviter que des sites que vous ne voulez pas affichent la page web que vous souhaiteriez afficher uniquement dans votre site.

Tapez nano /etc/apache2/sites-enabled/000-default.conf et observez la configuration.

<VirtualHost *:80>
	ServerName (le nom d'hôte de votre serveur, par exemple server.icnsoft.org)
	DocumentRoot (le chemin d'accès complet vers le dossier où sera hébergé la page par défaut, indépendante du reste)
</VirtualHost>

<VirtualHost *:443>
	ServerName (la même chose que ServerName dans la balise VirtualHost *:80)
	DocumentRoot (le même chemin d'accès qu'en haut)
	SSLEngine on
	SSLCertificateFile (le chemin d'accès du certificat SSL par défaut que Apache servira si il ne sait pas quel certificat envoyer)
	SSLCertificateKeyFile (le chemin d'accès de la clé privée de ce certificat)
	SSLCertificateChainFile (le chemin d'accès des certificat de l'autorité de certification)
	# (vous pouvez aussi mettre HSTS une fonction qui permet de forcer HTTPS sur tous les navigateurs) Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost> 
<Directory /var/www/html/default/>
    #Options Indexes FollowSymLinks (il s'agit de définir maintenant les règles de lecture de configuration .htaccess dans wwwroot, recommandé)
    AllowOverride All
    Require all granted
</Directory>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
SSLProtocol all
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP
SSLHonorCipherOrder on (il s'agit maintenant de définir quoi comme sécurité il faut garder)

N’oubliez pas de retirer les parenthèses et leur contenu et les remplacer si nécessaire par des vraies valeurs.

Création du site dans Apache


Créez un nouveau fichier .conf dans /etc/apache2/sites-available/

<VirtualHost *:80>
	ServerName www.icnsoft.org
	ServerAdmin remy@icnsoft.org
	Redirect / https://www.icnsoft.org/
</VirtualHost>

<VirtualHost *:443>
	ServerName www.icnsoft.org
	ServerAdmin remy@icnsoft.org
	DocumentRoot /var/www/html/icnsoft/
	SSLEngine on
	SSLCertificateFile /sslcerts/icnsoft-ssl/certificate.crt
	SSLCertificateKeyFile /sslcerts/icnsoft-ssl/private.key
	SSLCertificateChainFile /sslcerts/icnsoft-ssl/ca_bundle.crt
	Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
	SSLUseStapling on
</VirtualHost> 
<Directory /var/www/html/icnsoft/>
    #Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
SSLProtocol all
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP
SSLHonorCipherOrder on

Ceci est l’exemple de configuration directement issu de notre site icnsoft.org, juste pour icnsoft.org, que vous pouvez juste calquer directement pour vos besoins, le fichier ressemble suffisamment au 1er pour que vous en fassiez la configuration vous-même pour votre site. Le certificat SSL ici affiché n’est pas le même, il n’est que pour ce site, alors que pour celui du site par défaut peut être n’importe comment, peut couvrir ce site ou non. Bien sûr nous vous recommandons d’avoir un certificat couvrant tous les sites que vous envisagez d’héberger sur ce serveur, sauf s’ils deviennent trop nombreux.

Après, sauvegardez le fichier et tapez la commande dans votre client SSH ou le terminal local

a2enmod ssl (ne l'exécutez qu'une seule fois, vous pourrez l'omettre après lors des configurations de site subséquentes)
a2ensite *nom du fichier*.conf
systemctl restart apache2

Ca y est votre site est prêt! Vous pourrez cloner dans sites-available le fichier pour le réutiliser autant de fois que vous le voulez et réexécuter les commandes ci-dessus.

Un site rapide - configuration optimale


Nous allons maintenant prendre l’avantage du vaste écosystème de mods dans Apache2, tapez dans ssh a2enmod proxy puis systemctl restart apache2

Ceci est ce que l’on appelle un proxy inverse. Ceci permet de renvoyer à une adresse spécifique associée au serveur le contenu d’une page web à un autre endroit, notamment un autre serveur sur Internet ou un site quelconque en local, sur localhost.

C’est mieux d’utiliser un proxy inverse si le site est hébergé hors serveur mais qu’il est très lent de base. Ainsi ça aidera beaucoup au chargement. C’est mieux aussi si le site n’est qu’en localhost. Sinon, dans le reste des cas il est mieux que vous n’implémentiez pas ces prochaines directives.

Dans un nouveau fichier de configuration Apache:

<VirtualHost *:80>
  ServerName git.premiere-adresse.com
  ServerAlias git.seconde-adresse.com
  Redirect / https://git.premiere-adresse.com/
</VirtualHost>
<VirtualHost *:443>
  ServerName git.premiere-adresse.com
  ServerAlias git.seconde-adresse.com

  # Certificate
  SSLEngine on
  SSLCertificateFile /sslcerts/certificate.crt
  SSLCertificateKeyFile /sslcerts/private.key
  SSLCertificateChainFile /sslcerts/ca_bundle.crt

  # Proxy - cette partie est importante
  SSLProxyEngine on
  SSLProxyVerify none
  SSLProxyCheckPeerCN off
  SSLProxyCheckPeerName off
  SSLProxyCheckPeerExpire off
  ProxyPreserveHost On
  ProxyRequests On
  ProxyPass / http://adresse-du-site-pour-proxy:port/
  ProxyPassReverse / http://adresse-du-site-pour-proxy:port/

</VirtualHost>

Par exemple, ci-dessus, vous voyez une configuration simple d’un proxy inverse. N’oubliez pas de réexécuter les commandes en haut dans la rubrique Création du site Apache.

Généralement la performance est accélérée grâce aux fonctions telles KeepAlive ou cache mais nous vous conseillons de voir la documentation très complète d’Apache2 sur le site officiel

Conclusion


Le serveur Apache est probablement le plus rapide et le mieux codé de tous les Deamons web HTTP et HTTPS. Avec notre configuration optimale, vous pourrez rendre votre site aussi rapide que le nôtre.