Nginx est le serveur web le plus performant pour héberger des sites et applications web modernes. Sa gestion asynchrone des connexions lui permet de gérer des milliers de requêtes simultanées avec peu de ressources. Voici comment configurer nginx correctement sur un VPS.
Pourquoi choisir Nginx ?
Nginx surpasse Apache sur les sites à fort trafic grâce à son architecture événementielle. Il excelle également comme reverse proxy devant Node.js, PHP-FPM ou des conteneurs Docker. Sa configuration déclarative est claire et maintenable.
Pour un VPS avec 2 Go de RAM hébergeant un site WordPress ou une application PHP, nginx consomme 2 à 5x moins de mémoire qu'Apache pour le même trafic.
Installation et structure de configuration
apt install nginx
systemctl enable nginx
systemctl start nginx
La configuration principale est dans /etc/nginx/nginx.conf. Les virtual hosts (server blocks) vont dans /etc/nginx/sites-available/ avec un lien symbolique dans sites-enabled/.
Configurer un virtual host
server {
listen 80;
server_name monsite.fr www.monsite.fr;
root /var/www/monsite/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
HTTPS avec Let's Encrypt
apt install certbot python3-certbot-nginx
certbot --nginx -d monsite.fr -d www.monsite.fr
Certbot configure automatiquement nginx pour HTTPS avec renouvellement automatique. Ajoutez ensuite la redirection HTTP → HTTPS et le HSTS :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Optimisation des performances nginx
http {
gzip on;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_min_length 1000;
gzip_comp_level 6;
# Cache des fichiers statiques
location ~* \.(css|js|png|jpg|webp|woff2|ico)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Buffers
client_body_buffer_size 16K;
client_max_body_size 8M;
sendfile on;
tcp_nopush on;
}
Nginx comme reverse proxy
Nginx devant Node.js ou une application PHP-FPM :
upstream app {
server 127.0.0.1:3000;
}
location /api/ {
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Sécuriser nginx
Masquez la version de nginx, limitez les méthodes HTTP autorisées, configurez le rate limiting pour prévenir les attaques DDoS :
server_tokens off;
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req zone=api burst=20 nodelay;
La documentation officielle nginx est exhaustive et bien structurée pour tous les cas d'usage avancés.
Conclusion
Nginx bien configuré offre d'excellentes performances pour un coût ressources minimal. Commencez par le virtual host de base, activez HTTPS avec Certbot, puis ajoutez la compression gzip et le cache des statiques. Ces quelques optimisations suffisent pour la majorité des projets web.
Pour aller plus loin, explorez les upstream pools avec load balancing pour distribuer la charge, et proxycache pour mettre en cache les réponses dynamiques. La sécurité se renforce avec fail2ban pour bloquer les attaques par force brute et des rate limiting Nginx avec limitreqzone pour protéger vos endpoints sensibles. Surveillez en temps réel avec ngxtop ou envoyez vos access logs vers un stack ELK. Testez vos performances avec wrk ou Apache Bench. La documentation Nginx est exhaustive et bien structurée pour tous les cas d'usage avancés. Un Nginx bien configuré est le fondement d'une infrastructure web performante et sécurisée en production.
Monitoring et logs
Activez le logging structuré Nginx avec un format JSON pour faciliter l'analyse : logformat jsoncombined escape=json '{"time":"$timeiso8601","status":$status,"uri":"$uri","ip":"$remoteaddr"}';. Envoyez ces logs vers un stack centralisé (Loki + Grafana ou ELK) pour visualiser le trafic en temps réel et détecter les anomalies rapidement.
Optimisation des workers et connexions
Configurez workerprocesses auto; pour utiliser tous les cœurs CPU disponibles. workerconnections 1024; définit le maximum de connexions simultanées par worker. Pour les serveurs haute charge, augmentez workerconnections à 4096 et activez multiaccept on;. La directive keepalivetimeout 65; maintient les connexions HTTP ouvertes pour réduire la latence des requêtes successives du même client.