Ceci est une ancienne révision du document !
Nginx : serveur Web asynchrone
Nginx (Engine X) est un serveur Web asynchrone écrit par Igor Sysoev pour les besoins d'un site russe à très fort trafic. Il peut être configuré pour être un serveur proxy inverse Web et un serveur proxy de messagerie électronique (IMAP / POP3). Une partie de la documentation a été traduite du russe vers l'anglais. Ses sources sont disponibles sous une licence de type BSD.
Installation
Pour installer Nginx, il suffit d'installer le paquet nginx, puis de l'activer en saisissant dans un terminal la commande suivante :
sudo /etc/init.d/nginx restart
Dans certains cas, le redémarrage s'effectue en saisissant :
sudo service nginx restart
Configuration
Configuration de Nginx
Le fichier de configuration du serveur web Nginx se trouve dans /etc/nginx/nginx.conf
Si vous désirez l'éditer, modifier (avec les droits administrateur) le fichier /etc/nginx/nginx.conf
Nginx et les Virutal Hosts (vhosts)
Nginx inclus un exemple de configuration d'un vhost que vous pouvez trouver dans /etc/nginx/sites-available/default
Si vous souhaitez l'éditer, modifier (avec les droits administrateur) le fichier /etc/nginx/sites-available/default
Pour configurer votre nom de domaine (vhost), vous pouvez copier la configuration par défaut du vhost "default" puis y apporter vos modifications. Exemple :
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mondomaine.tld
Puis, éditez la configuration de votre nom de domaine mondomaine.tld en modifiant le fichier /etc/nginx/sites-available/mondomaine.tld
Le sous-répertoire sites-available stocke les vhosts mais pour que Nginx les prenne en considération, vous devez les activer en créant un lien symbolique dans /etc/nginx/sites-enabled
Pour créer un lien symbolique et activer votre vhost :
sudo ln -s /etc/nginx/sites-available/mondomaine.tld /etc/nginx/sites-enabled/mondomaine.tld
Il ne reste qu'à redémarrer Nginx :
sudo /etc/init.d/nginx restart
Configuration serveur proxy inverse et cache Web
La configuration qui va suivre se décomposeras en 3 parties la paramétrage globale du serveur nginx, le paramétrage des fonctions des reverse proxy et de cache et un exemple de configuration du serveur web se trouvant derrière le reverse proxy.
Les fichiers et les dossiers de configuration utilisés seront
/etc/nginx/nginx.conf /etc/nginx/conf.d/proxy.conf /etc/nginx/sites-enabled/ /etc/nginx/sites-available/
Cette séparation a pour but d'ajouter de la clarté dans la configuration car tout les fichiers de configuration sont inclus dans le fichier nginx.conf.
Configuration globale du serveur
La configuration se fait dans le fichier /etc/nginx/nginx.conf
Contenu du fichier
user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; # envoi moins d'information sur le serveur server_tokens off; # taille des buffers et taille max des requêtes normales client_body_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 1 1K; ignore_invalid_headers on; # timeout client_body_timeout 5; client_header_timeout 5; keepalive_timeout 5 5; send_timeout 5; ignore_invalid_headers on; server_name_in_redirect off; # active la compression des pages sauf pour les navigateurs pourris gzip on; gzip_comp_level 6; gzip_proxied any; gzip_vary on; gzip_types text/plain text/css application/x-javascript; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; # limitation du nombre de connexion par client limit_zone gulag $binary_remote_addr 1m; limit_conn gulag 50; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
options | explications |
---|---|
user | utilisateur avec lequel sera lancé le processus, celui ci doit avoir le moins de privilèges possible |
worker_processes | corespond au nombre de coeurs |
worker_connections | fixer ce paramètre en fonction du calcul ci dessous (valable que sur un reverse proxy) max_clients = worker_processes * worker_connections/4 |
access_log | chemin vers le fichier log des connexions |
error_log | chemin vers le fichier log des erreurs |
default_type | type par défaut des fichiers dont le type n'est pas répertorier dans le fichier mimes.types |
server_tokens off | permet de divulger moins d'information sur le reverse proxy |
client_body_buffer_size | définit la taille au dela de laquelle la requete sera enregistrée dans un fichier |
client_max_body_size | taille max des donnes envoyés par un client |
large_client_header_buffers | définit le nombre de buffer ainsi que leurs tailles, la taille max de la requete uri est donc la multiplication de ces deux chiffres |
client_body_timeout | Si le client n'evoie pas la totalité de sa requête en 5 sec c'est mort ! |
client_header_timeout | Si le client n'envoie pas l'entete de sa requête même traitement |
keepalive_timeout 5 5 | premier chiffre temps max d'une connexion keepalive, deuxième chiffre indication de cette valeur dans le champ timeout de l'entête de la réponse |
keepalive_requests 100 | nombre de requête keep alive sur une connexion |
send_timeout | temps maximum de latence lors d'un envoi |
ignore_invalid_headers | supprime les requêtes malformés |
server_name_in_redirect | désactive la réécriture du nom de serveur, protection contre les scans |
gzip | activation ou désactivation de la compression |
gzip_comp_level | niveau de compression (peut aller jusqu'à 9) |
gzip_proxied any | activer la compression pour la réponse du serveur web derrière le reverse proxy |
Paramétrage des fonctions reverse proxy et cache
Exemple de configuration d'un serveur web arrière
Autres configurations de Nginx
- Installation de Nginx et PHP-FPM sur Debian/Ubuntu via HowToForge
- Nginx et PHP tournant en FastCGI : à compléter