Definition
Nginx (prononce "engine-x") est un serveur web, reverse proxy et load balancer open source cree par Igor Sysoev en 2004. Il alimente plus de 30% des sites web dans le monde, dont des plateformes a tres fort trafic (Netflix, Airbnb, WordPress.com).
Nginx est reconnu pour sa capacite a gerer des centaines de milliers de connexions simultanees avec une faible consommation de memoire.
Roles de Nginx
1. Serveur web statique
Servir des fichiers HTML, CSS, JS, images directement au client.
2. Reverse proxy
Recevoir les requetes clients et les rediriger vers des serveurs backend (Node.js, Python, PHP).
3. Load balancer
Distribuer le trafic entre plusieurs serveurs backend.
4. SSL/TLS termination
Gerer le chiffrement HTTPS, dechargeant les backends.
5. Cache HTTP
Mettre en cache les reponses des backends pour reduire la charge.
Configuration typique
# Reverse proxy + SSL pour une app Node.js
server {
listen 80;
server_name monsite.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name monsite.com;
ssl_certificate /etc/letsencrypt/live/monsite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monsite.com/privkey.pem;
# Cache des fichiers statiques
location /static/ {
alias /var/www/monsite/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# Reverse proxy vers Node.js
location / {
proxy_pass http://localhost:3000;
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;
}
}
Nginx vs Apache
| Nginx | Apache | |
|---|---|---|
| Architecture | Event-driven, async | Process/thread per request |
| Performances | Excellentes (100k+ connexions) | Bonnes (mais plus gourmand) |
| Config | Fichiers centraux | .htaccess distribues |
| Modules | Compiles a la construction | Chargeables dynamiquement |
| Cas ideal | Reverse proxy, high traffic | Hosting partage, .htaccess |
Nginx vs alternatives modernes
- Caddy : config automatique HTTPS, plus simple, ideal pour les petits projets
- Traefik : auto-discovery pour Docker/Kubernetes, ideal pour les microservices
- Envoy : service mesh, gRPC, tres performant mais complexe