Retour au blog
linux14 min de lecture5 juin 2026

Configuration avancée de NGINX pour la production

Reverse proxy, load balancing, rate limiting, gzip, cache et sécurité avec NGINX en production.

NGINX est bien plus qu'un simple serveur web — c'est un reverse proxy, load balancer, cache HTTP et terminateur SSL de classe mondiale. Ce guide couvre la configuration avancée pour la production : virtual hosts, proxy vers Node.js/PHP, rate limiting, gzip, cache et sécurité.

Structure des fichiers de configuration

bash
/etc/nginx/
├── nginx.conf          # Configuration principale
├── conf.d/             # Configs globales incluses automatiquement
├── sites-available/    # Fichiers de vhosts disponibles
│   ├── xytherion.online
│   └── api.xytherion.online
└── sites-enabled/      # Symlinks vers sites-available
    └── xytherion.online -> ../sites-available/xytherion.online

# Activer un site
ln -s /etc/nginx/sites-available/xytherion.online       /etc/nginx/sites-enabled/

# Tester la configuration
nginx -t

# Recharger sans coupure
systemctl reload nginx

Configuration nginx.conf de base optimisée

nginx
# /etc/nginx/nginx.conf
user www-data;
worker_processes auto;  # = nombre de CPUs
worker_rlimit_nofile 65535;

events {
    worker_connections 4096;
    use epoll;           # Linux optimisé
    multi_accept on;
}

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

    # Performances
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 1000;

    # Compression Gzip
    gzip on;
    gzip_vary on;
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_types
        text/plain text/css text/xml text/javascript
        application/javascript application/json
        application/xml+rss image/svg+xml;

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

    # Sécurité
    server_tokens off;
    client_max_body_size 20M;
    client_body_timeout 12;
    client_header_timeout 12;
    send_timeout 10;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Reverse Proxy vers Node.js / Next.js

nginx
# /etc/nginx/sites-available/xytherion.online
upstream nextjs_app {
    server 127.0.0.1:3090;
    keepalive 64;
}

server {
    listen 443 ssl http2;
    server_name xytherion.online www.xytherion.online;

    ssl_certificate     /etc/letsencrypt/live/xytherion.online/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xytherion.online/privkey.pem;
    include /etc/nginx/snippets/ssl-params.conf;

    # Headers proxy
    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;

    # Assets statiques Next.js — cache longue durée
    location /_next/static/ {
        proxy_pass http://nextjs_app;
        add_header Cache-Control "public, max-age=31536000, immutable";
    }

    # Everything else → Next.js
    location / {
        proxy_pass http://nextjs_app;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
    }
}

Rate Limiting — Protection anti-DDoS et brute force

nginx
# Dans nginx.conf (zone http)
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

# Dans le vhost
server {
    # API : 10 req/s avec burst de 20
    location /api/ {
        limit_req zone=api burst=20 nodelay;
        limit_conn conn_limit 10;
        proxy_pass http://nextjs_app;
    }

    # Login : 1 req/s strictement
    location /api/auth/login {
        limit_req zone=login burst=3;
        proxy_pass http://nextjs_app;
    }
}

Cache HTTP avec proxy_cache

nginx
# Dans nginx.conf
proxy_cache_path /var/cache/nginx levels=1:2
                 keys_zone=app_cache:10m
                 max_size=1g inactive=60m
                 use_temp_path=off;

# Dans le vhost
server {
    location / {
        proxy_cache app_cache;
        proxy_cache_valid 200 1h;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating;
        proxy_cache_background_update on;
        proxy_cache_lock on;

        # Header pour voir si la réponse vient du cache
        add_header X-Cache-Status $upstream_cache_status;

        proxy_pass http://nextjs_app;
    }

    # Exclure les pages authentifiées du cache
    location /dashboard {
        proxy_cache off;
        proxy_pass http://nextjs_app;
    }
}

Load Balancing

nginx
# Round-robin (défaut)
upstream backend {
    server 10.0.0.1:3000;
    server 10.0.0.2:3000;
    server 10.0.0.3:3000;
}

# Least connections
upstream backend {
    least_conn;
    server 10.0.0.1:3000 weight=3;  # reçoit 3x plus de trafic
    server 10.0.0.2:3000;
    server 10.0.0.3:3000 backup;    # utilisé seulement si les autres tombent
}

# IP Hash — même client → même serveur (sessions collantes)
upstream backend {
    ip_hash;
    server 10.0.0.1:3000;
    server 10.0.0.2:3000;
}

Commandes de diagnostic utiles

bash
# Tester la config avant reload
nginx -t

# Voir les connexions actives
nginx -s status  # ou
ss -tlnp | grep nginx

# Logs en temps réel
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# Analyser les logs (top IPs)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

# Vider le cache proxy
find /var/cache/nginx -type f -delete

Utilisez ngxtop (pip install ngxtop) pour monitorer NGINX en temps réel avec des statistiques sur les routes, codes HTTP et temps de réponse.

#nginx#serveur#linux#configuration#production

Testez vos configurations

Xytherion Tools propose des outils gratuits pour vérifier vos DNS, auditer votre SSL, tester SPF/DKIM/DMARC et bien plus — directement depuis votre navigateur.

Configuration avancée de NGINX pour la production — Xytherion Tools