Base de connaissances

Configuration et optimisation des serveurs web Nginx et Apache

Nginx (prononcé "engine-x") est un serveur web léger et performant ainsi qu'un serveur proxy inverse. Il a été initialement créé comme une solution au problème C10K (gérer 10 000 connexions simultanées) et est depuis devenu l'un des serveurs web les plus populaires au monde. Nginx est conçu pour servir rapidement et efficacement du contenu statique et est largement utilisé comme un proxy inverse, un répartiteur de charge et un cache HTTP.

Apache :
Le serveur HTTP Apache, couramment appelé Apache, est le logiciel de serveur web le plus utilisé dans le monde. Il a été développé par la Fondation Apache Software et est en usage depuis 1995. Apache est connu pour sa flexibilité, son ensemble de fonctionnalités étendu et son fort soutien communautaire. Il prend en charge la génération de contenu dynamique via des modules tels que PHP, Python et d'autres, ce qui en fait un excellent choix pour de nombreux types d'applications web.

Installation de Nginx et Apache

Installation de Nginx :
Sur les systèmes basés sur Ubuntu ou Debian, vous pouvez installer Nginx avec les commandes suivantes :

sudo apt update
sudo apt install nginx

Sur les systèmes basés sur CentOS ou RHEL :

sudo yum install epel-release
sudo yum install nginx

Après l'installation, vous pouvez démarrer et activer Nginx avec :

sudo systemctl start nginx
sudo systemctl enable nginx

Installation d'Apache :
Sur les systèmes basés sur Ubuntu ou Debian :

sudo apt update
sudo apt install apache2

Sur les systèmes basés sur CentOS ou RHEL :

sudo yum install httpd

Une fois installé, démarrez et activez Apache :

sudo systemctl start apache2  # Pour Ubuntu/Debian
sudo systemctl enable apache2

sudo systemctl start httpd  # Pour CentOS/RHEL
sudo systemctl enable httpd

Configuration de base de Nginx

Fichiers de configuration :
Le fichier de configuration de Nginx se trouve généralement à /etc/nginx/nginx.conf. C'est là que la plupart des paramètres globaux du serveur sont définis. La configuration est hiérarchique, et chaque bloc (server, location) a son propre contexte.

Hôtes virtuels dans Nginx :
Nginx n'utilise pas la directive VirtualHost comme Apache, mais utilise plutôt des blocs de serveur pour définir chaque hôte virtuel. Une configuration de base pour un hôte virtuel dans Nginx pourrait ressembler à ceci :

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Cette configuration écoute les requêtes HTTP sur le port 80 pour le domaine example.com, sert le contenu depuis /var/www/example.com/html, et définit le fichier index comme étant index.html.

Directives courantes :

  • listen : spécifie l'adresse IP et le port sur lesquels le serveur doit écouter.
  • server_name : définit le domaine ou l'adresse IP à laquelle le serveur doit répondre.
  • root : définit le répertoire racine où le contenu est stocké.
  • index : spécifie le fichier par défaut qui est servi lorsqu'un répertoire est accédé.

Configuration de base d'Apache

Fichiers de configuration :
Le fichier de configuration principal d'Apache se trouve à /etc/httpd/httpd.conf ou /etc/apache2/apache2.conf, selon la distribution. De plus, les configurations des hôtes virtuels sont souvent stockées dans /etc/apache2/sites-available/.

Hôtes virtuels dans Apache :
Apache utilise la directive VirtualHost pour configurer plusieurs sites web sur le même serveur. Voici un exemple :

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/example.com/html
    ServerName example.com

    <Directory /var/www/example.com/html>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Cette configuration écoute sur le port 80 pour les requêtes vers example.com, sert les fichiers depuis /var/www/example.com/html, et fournit des configurations pour les journaux d'erreurs et d'accès.

Directives courantes :

  • DocumentRoot : spécifie le répertoire où les fichiers du site sont situés.
  • ServerName : définit le nom de domaine ou l'adresse IP à laquelle l'hôte virtuel répond.
  • ErrorLog : spécifie l'emplacement du journal des erreurs.
  • CustomLog : spécifie l'emplacement du journal d'accès.

Optimisation de Nginx

Réglage des processus de travail :
Nginx est conçu pour être très efficace dans la gestion de multiples connexions simultanées. Vous pouvez l'optimiser en configurant le nombre de processus de travail :

worker_processes auto;
worker_connections 1024;

La directive worker_processes détermine combien de processus de travail Nginx utilise, et worker_connections définit le nombre maximum de connexions simultanées que chaque travailleur peut gérer. Vous pouvez ajuster ces valeurs en fonction du CPU et de la mémoire de votre serveur.

Compression Gzip :
L'activation de la compression Gzip réduit la taille du contenu envoyé aux clients, ce qui accélère le temps de chargement des pages. Dans Nginx, cela peut être fait en ajoutant ce qui suit dans le bloc http :

gzip on;
gzip_types text/plain text/css application/javascript;
gzip_comp_level 6;

Mise en cache :
Nginx offre des mécanismes de mise en cache qui peuvent réduire la charge sur votre serveur en mettant en cache le contenu fréquemment demandé. Voici un exemple d'une simple configuration de cache :

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 1h;
    proxy_cache_use_stale error timeout updating;
}

Optimisation d'Apache

Réglage de MPM (Module de Traitement Multi-processus) :
Apache utilise différents MPM pour traiter les requêtes entrantes. Pour des performances optimales, il est important de choisir le bon MPM et de le configurer. Les deux MPM les plus couramment utilisés sont mpm_event et mpm_worker.

Par exemple, avec le module mpm_event :

<IfModule mpm_event_module>
    StartServers            2
    MinSpareThreads        25
    MaxSpareThreads       75
    ThreadLimit           64
    ThreadsPerChild       25
    MaxRequestWorkers    150
    MaxConnectionsPerChild   0
</IfModule>

Activation de la compression Gzip :
Tout comme Nginx, vous pouvez activer la compression Gzip dans Apache en ajoutant ce qui suit dans la configuration :

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>

Mise en cache :
Apache peut mettre en cache le contenu en utilisant des modules comme mod_cache et mod_cache_disk. Voici un exemple d'activation du cache sur disque :

<IfModule mod_cache.c>
    CacheRoot /var/cache/apache2/mod_cache
    CacheEnable disk /
</IfModule>

Meilleures pratiques de sécurité pour Nginx

  • Limiter la taille des requêtes : empêche les grandes requêtes de surcharger votre serveur en limitant la taille des requêtes.
client_max_body_size 10M;
  • Désactiver les modules inutiles : désactivez les modules dont vous n'avez pas besoin pour réduire la surface d'attaque.

  • Configuration SSL : servez toujours votre site via HTTPS. Utilisez des configurations SSL robustes et des certificats Let's Encrypt.

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:...';

Meilleures pratiques de sécurité pour Apache

  • Désactiver la liste des répertoires : empêche les utilisateurs de voir les listings des répertoires.
Options -Indexes
  • Désactiver les modules inutiles : Apache est livré avec de nombreux modules qui peuvent ne pas être nécessaires. Désactivez ceux qui ne sont pas utilisés pour minimiser les vulnérabilités.

  • Configuration SSL : Comme pour Nginx, assurez-vous que SSL est configuré correctement :

SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key

Comparaison entre Nginx et Apache

  • Performance : Nginx a tendance à offrir de meilleures performances dans les scénarios avec un contenu statique lourd en raison de son architecture basée sur des événements. Apache, en revanche, est souvent préféré pour le contenu dynamique, notamment avec PHP ou d'autres modules.

  • Configuration : Nginx a une configuration plus concise et moins complexe, tandis qu'Apache est plus flexible et dispose d'un plus grand écosystème de modules.

  • Utilisation des ressources : Nginx est généralement plus efficace en termes d'utilisation de la mémoire et du processeur, notamment sous une charge importante.

  • Soutien communautaire : Nginx et Apache bénéficient d'un fort soutien communautaire, mais Apache a un historique plus long.

Nginx et Apache sont tous deux des serveurs web puissants et largement utilisés, chacun avec ses forces et options de configuration. En configurant et en optimisant soigneusement votre serveur, vous pouvez atteindre une performance et une sécurité optimales. Choisissez Nginx si vous avez besoin de hautes performances avec une faible consommation de ressources, en particulier pour le contenu statique et le proxy inverse. Choisissez Apache si vous avez besoin de flexibilité, d'un écosystème robuste de modules et d'un large support pour le contenu dynamique. La configuration et l'optimisation appropriées du serveur sont essentielles pour garantir que vos sites web fonctionnent de manière efficace et sécurisée. Que vous gériez un petit blog ou une application d'entreprise à fort trafic, Nginx et Apache offrent les outils nécessaires pour répondre à vos besoins de serveur web.

  • 0 Utilisateurs l'ont trouvée utile
Cette réponse était-elle pertinente?