Web
Difficulte: Intermediate
6 min de lecture

Installation et Configuration de NGINX sur Linux

Apprenez à installer et configurer NGINX, le serveur web haute performance utilisé par les plus grands sites web au monde.

Retour aux tutoriels
À propos de NGINX
NGINX est un serveur web haute performance, un reverse proxy et un serveur de cache. Il est connu pour sa stabilité, son faible usage de ressources et sa capacité à gérer de nombreuses connexions simultanées.

Prérequis

  • Système : Ubuntu 18.04+ ou Debian 9+ (adaptable à CentOS/RHEL)
  • Privilèges : Accès root ou sudo
  • Ressources : Minimum 1GB RAM, 10GB d'espace disque
  • Réseau : Ports 80 et 443 disponibles

Installation de NGINX

Méthode 1 : Installation depuis les dépôts officiels

La méthode la plus simple pour installer NGINX :

# Mise à jour des paquets
sudo apt update

# Installation de NGINX
sudo apt install nginx -y

# Vérification de l'installation
nginx -v
sudo systemctl status nginx

Méthode 2 : Installation depuis le dépôt officiel NGINX

Pour obtenir la dernière version stable directement depuis NGINX :

# Installation des dépendances
sudo apt install curl gnupg2 ca-certificates lsb-release -y

# Ajout de la clé GPG officielle
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

# Ajout du dépôt officiel
echo "deb http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list

# Installation
sudo apt update
sudo apt install nginx -y

Démarrage et activation

# Démarrer NGINX
sudo systemctl start nginx

# Activer au démarrage
sudo systemctl enable nginx

# Vérifier le statut
sudo systemctl status nginx
Test d'installation
Ouvrez votre navigateur et accédez à http://votre-ip. Vous devriez voir la page d'accueil par défaut de NGINX.

Structure des fichiers NGINX

Répertoires importants

  • /etc/nginx/ : Configuration principale
  • /etc/nginx/sites-available/ : Sites disponibles
  • /etc/nginx/sites-enabled/ : Sites activés
  • /var/www/html/ : Contenu web par défaut
  • /var/log/nginx/ : Logs d'accès et d'erreurs

Fichiers de configuration principaux

# Configuration principale
/etc/nginx/nginx.conf

# Configuration par défaut du site
/etc/nginx/sites-available/default

# Vérifier la syntaxe de la configuration
sudo nginx -t

# Recharger la configuration
sudo systemctl reload nginx

Configuration de base

Configuration globale optimisée

Éditez le fichier principal /etc/nginx/nginx.conf :

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    # Types MIME et charset
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    charset utf-8;

    # Optimisations performances
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    client_max_body_size 100M;

    # Sécurité
    server_tokens off;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # Compression
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/json
        application/javascript
        application/xml+rss
        application/atom+xml
        image/svg+xml;

    # Logs
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log warn;

    # Inclure les configurations des sites
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Configuration d'un site web simple

Créez un nouveau site dans /etc/nginx/sites-available/monsite :

server {
    listen 80;
    listen [::]:80;
    
    server_name exemple.com www.exemple.com;
    root /var/www/monsite;
    index index.html index.htm index.php;

    # Logs spécifiques au site
    access_log /var/log/nginx/monsite_access.log;
    error_log /var/log/nginx/monsite_error.log;

    # Gestion des fichiers statiques
    location / {
        try_files $uri $uri/ =404;
    }

    # Cache pour les ressources statiques
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Sécurité - blocage des fichiers sensibles
    location ~ /\. {
        deny all;
    }

    location ~ ~$ {
        deny all;
    }
}

Activation du site

# Créer le répertoire du site
sudo mkdir -p /var/www/monsite

# Créer une page d'accueil
echo "

Bienvenue sur mon site NGINX

" | sudo tee /var/www/monsite/index.html # Activer le site sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/ # Désactiver le site par défaut (optionnel) sudo rm /etc/nginx/sites-enabled/default # Tester et recharger sudo nginx -t sudo systemctl reload nginx

Configuration SSL avec Let's Encrypt

Installation de Certbot

# Installation de Certbot
sudo apt install certbot python3-certbot-nginx -y

# Obtenir un certificat SSL
sudo certbot --nginx -d exemple.com -d www.exemple.com

# Test du renouvellement automatique
sudo certbot renew --dry-run

Configuration SSL manuelle

Exemple de configuration avec SSL :

server {
    listen 80;
    server_name exemple.com www.exemple.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name exemple.com www.exemple.com;
    root /var/www/monsite;
    index index.html index.htm;

    # Certificats SSL
    ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;

    # Configuration SSL sécurisée
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # Headers de sécurité
    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

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

Configuration en Reverse Proxy

Proxy vers une application Node.js

upstream nodejs_backend {
    server 127.0.0.1:3000;
    keepalive 32;
}

server {
    listen 80;
    server_name app.exemple.com;

    location / {
        proxy_pass http://nodejs_backend;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

Load Balancing

upstream backend_servers {
    least_conn;
    server 192.168.1.10:80 weight=3;
    server 192.168.1.11:80 weight=2;
    server 192.168.1.12:80 backup;
}

server {
    listen 80;
    server_name api.exemple.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # Health check
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    }
}

Optimisations avancées

Cache et performance

# Configuration du cache
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen 80;
    server_name cache.exemple.com;

    location / {
        proxy_cache my_cache;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 3;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_lock on;

        proxy_pass http://backend;
        add_header X-Cache-Status $upstream_cache_status;
    }
}

Limitation du taux de requêtes

http {
    # Zone de limitation
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/m;
    limit_req_zone $binary_remote_addr zone=login:10m rate=1r/m;

    server {
        listen 80;
        server_name api.exemple.com;

        location /api/ {
            limit_req zone=api burst=20 nodelay;
            proxy_pass http://backend;
        }

        location /login {
            limit_req zone=login burst=5;
            proxy_pass http://backend;
        }
    }
}

Surveillance et maintenance

Monitoring avec stub_status

server {
    listen 80;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        allow 192.168.1.0/24;
        deny all;
    }
}

Rotation des logs

# Configuration logrotate pour NGINX
sudo tee /etc/logrotate.d/nginx > /dev/null <

Commandes utiles

# Tester la configuration
sudo nginx -t

# Recharger la configuration
sudo systemctl reload nginx

# Redémarrer NGINX
sudo systemctl restart nginx

# Voir les logs en temps réel
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

# Statistiques de connexion
sudo netstat -tulpn | grep nginx

# Processus NGINX
ps aux | grep nginx
Sécurité importante
N'oubliez pas de configurer un pare-feu (UFW, iptables) pour protéger votre serveur et de maintenir NGINX à jour régulièrement.

Dépannage courant

Problèmes fréquents

  • Port déjà utilisé : Vérifiez avec sudo netstat -tulpn | grep :80
  • Permissions : Assurez-vous que www-data peut lire les fichiers
  • Configuration invalide : Utilisez nginx -t pour diagnostiquer
  • SSL : Vérifiez les chemins des certificats et les permissions

Commandes de diagnostic

# Vérifier la syntaxe
sudo nginx -t

# Mode debug
sudo nginx -t -c /etc/nginx/nginx.conf

# Tester une configuration spécifique
sudo nginx -t -c /etc/nginx/sites-available/monsite

# Voir la configuration compilée
nginx -T

Conclusion

NGINX est maintenant installé et configuré sur votre système. Vous maîtrisez :

  • L'installation et la configuration de base de NGINX
  • La création et gestion de sites virtuels
  • La configuration SSL avec Let's Encrypt
  • L'utilisation en reverse proxy et load balancer
  • Les optimisations de performance et de sécurité
  • La surveillance et la maintenance

NGINX est un serveur web extrêmement puissant et flexible, capable de gérer des charges importantes tout en maintenant d'excellentes performances. Sa configuration modulaire permet de l'adapter à tous types de besoins, du simple site statique aux architectures complexes de microservices.

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Partager ce tutoriel

Cet article vous a plu ?

Commentaires

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.