Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tutoriel:reverse_proxy_nginx [Le 13/06/2012, 12:35] – [Configuration] Miam Miam | tutoriel:reverse_proxy_nginx [Le 13/08/2015, 14:58] (Version actuelle) – Mv -> https://doc.ubuntu-fr.org/nginx beaver | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> Lucid tutoriel}} | ||
| - | ---- | ||
| - | |||
| - | ====== Configuration d'un proxy inverse et cache avec nginx ====== | ||
| - | |||
| - | Ce tutoriel montre la configuration de nginx en tant que reverse proxy cache. | ||
| - | |||
| - | Cette configuration contiendra les éléments suivants: | ||
| - | |||
| - | * Cache au niveau du reverse proxy | ||
| - | * Activation des champs expires dans la requête http | ||
| - | * Compression entre le client et le reverse proxy | ||
| - | * Limitation des connexions entre le client et le reverse proxy (nombre et temps) | ||
| - | |||
| - | ===== Pré-requis ===== | ||
| - | |||
| - | * Avoir lu la page de documentation sur [[: | ||
| - | * Comprendre la fonction d'un reverse proxy ou un proxy inverse [[http:// | ||
| - | |||
| - | ===== Configuration ===== | ||
| - | |||
| - | <note important> | ||
| - | Certain termes présent dans cet article ne sont pas très " | ||
| - | </ | ||
| - | |||
| - | |||
| - | La configuration qui va suivre se décomposera en trois parties : | ||
| - | |||
| - | * Le paramétrage global du serveur nginx. | ||
| - | * Le paramétrage des fonctions de reverse proxy et de cache. | ||
| - | * Un exemple de configuration du serveur web se trouvant derrière le reverse proxy. | ||
| - | |||
| - | Les fichiers et les dossiers de configuration utilisés seront : | ||
| - | |||
| - | / | ||
| - | / | ||
| - | / | ||
| - | / | ||
| - | | ||
| - | Cette séparation a pour but d' | ||
| - | |||
| - | === Configuration globale du serveur === | ||
| - | |||
| - | La configuration se fait dans le fichier / | ||
| - | |||
| - | Contenu du fichier | ||
| - | |||
| - | < | ||
| - | user www-data; | ||
| - | worker_processes | ||
| - | error_log | ||
| - | pid / | ||
| - | events { | ||
| - | worker_connections | ||
| - | } | ||
| - | http { | ||
| - | include | ||
| - | default_type application/ | ||
| - | access_log | ||
| - | sendfile | ||
| - | # | ||
| - | # | ||
| - | keepalive_timeout | ||
| - | tcp_nodelay | ||
| - | # envoi moins d' | ||
| - | server_tokens off; | ||
| - | |||
| - | # taille des buffers et taille max des requêtes normales | ||
| - | client_body_buffer_size 1k; | ||
| - | client_max_body_size | ||
| - | large_client_header_buffers 1 1K; | ||
| - | ignore_invalid_headers on; | ||
| - | | ||
| - | | ||
| - | # définition des différents 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 | ||
| - | gzip_disable "MSIE [1-6]\.(? | ||
| - | | ||
| - | # limitation du nombre de connexion par client | ||
| - | limit_zone gulag $binary_remote_addr 1m; | ||
| - | limit_conn gulag 50; | ||
| - | |||
| - | include / | ||
| - | include / | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | ^ options | ||
| - | | user | utilisateur avec lequel sera lancé le processus, celui ci doit avoir le moins de privilèges possible | ||
| - | | worker_processes | ||
| - | | worker_connections | ||
| - | |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épertorié dans le fichier mimes.types | | ||
| - | |server_tokens off | permet de divulguer moins d' | ||
| - | |client_body_buffer_size | définit la taille au delà de laquelle la requête sera enregistrée dans un fichier | | ||
| - | |client_max_body_size | taille max des données envoyées par un client | ||
| - | | large_client_header_buffers | définit le nombre de buffer ainsi que leurs tailles, la taille max de la requête URI est donc la multiplication de ces deux chiffres | | ||
| - | | client_body_timeout | si le client n' | ||
| - | | client_header_timeout | ||
| - | | 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' | ||
| - | | keepalive_requests 100 | nombre de requêtes keepalive sur une connexion | | ||
| - | | send_timeout | temps maximum de latence lors d'un envoi | | ||
| - | | ignore_invalid_headers | supprime les requêtes malformées | | ||
| - | | 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 | ||
| - | | gzip_proxied any | activer la compression pour la réponse du serveur web derrière le reverse proxy | | ||
| - | | gzip_vary | active l' | ||
| - | | gzip_types | les types de fichier qui seront compréssés | | ||
| - | | gzip_disable | permet la désactivation de la compression pour les navigateurs pourris | | ||
| - | |limit_zone gulag $binary_remote_addr 1m | crée une zone de stockage nommée « gulag » utilisant | ||
| - | | limit_conn gulag 50 | limite le nombre de demande de connexions parallèles à 50 par client | | ||
| - | |||
| - | |||
| - | |||
| - | === Paramétrage des fonctions reverse proxy et cache === | ||
| - | |||
| - | Les paramètres du reverse proxy et du cache seront consignés dans le fichier / | ||
| - | |||
| - | Si vous voulez plus d' | ||
| - | |||
| - | Contenu du fichier | ||
| - | |||
| - | < | ||
| - | proxy_redirect | ||
| - | proxy_set_header | ||
| - | proxy_set_header | ||
| - | proxy_set_header | ||
| - | proxy_hide_header | ||
| - | proxy_intercept_errors on; | ||
| - | proxy_buffering on; | ||
| - | |||
| - | |||
| - | proxy_cache_key " | ||
| - | proxy_cache_path / | ||
| - | </ | ||
| - | |||
| - | |||
| - | ^ options | ||
| - | | proxy_redirect | ||
| - | | proxy_set_header | permet de modifier les entêtes | ||
| - | | proxy_hide_header | permet de cacher certains entêtes | | ||
| - | | proxy_intercept_errors on | permet de contrôler les retours de code d' | ||
| - | | proxy_buffering on | Si l'on désactive cette option le serveur arrière doit attendre que les données soient envoyées au client pour fermer sa connexion avec nginx | | ||
| - | | proxy_cache_min_uses | ||
| - | | proxy_cache_key | clé permettant de stocker des fichiers de plusieurs sites différents dans le même cache. Les noms de fichiers seront le md5 de cette combinaison | | ||
| - | | proxy_cache_path | indique le chemin vers le dossier de cache, organisation des dossiers | ||
| - | |||
| - | |||
| - | === Exemple de configuration d'un serveur web arrière === | ||
| - | |||
| - | Nous allons créer le fichier trucbidule dans le répertoire / | ||
| - | |||
| - | Les éléments de la configuration | ||
| - | |||
| - | * les requêtes arrivant sur le port 80 et ayant pour nom de domaine de destination trucbidul.fr seront redirigés vers le serveur web ayant l' | ||
| - | * seule les méthodes GET,HEAD et POST seront accépté | ||
| - | * tous les fichiers seront mis en cache minimum 12 heures | ||
| - | * Les fichiers statiques seront mis en cache 2 jours | ||
| - | * pas de mise en cache pour la section administration du site | ||
| - | * le champs expires de la requête http seront remplis | ||
| - | * les codes d' | ||
| - | |||
| - | Contenu du fichier trucbidule: | ||
| - | |||
| - | < | ||
| - | server { | ||
| - | |||
| - | listen 80; | ||
| - | server_name www.trucbidule.fr trucbidule.fr; | ||
| - | |||
| - | # Ici on désactive les access_log pour ne pas faire doublon avec Apache | ||
| - | access_log off; | ||
| - | #access_log / | ||
| - | |||
| - | if ($request_method !~ ^(GET|HEAD|POST)$ ) { | ||
| - | return 444; | ||
| - | } | ||
| - | |||
| - | |||
| - | location / { | ||
| - | proxy_pass http:// | ||
| - | proxy_cache cache; | ||
| - | proxy_cache_valid 12h; | ||
| - | expires 12h; | ||
| - | proxy_cache_use_stale error timeout invalid_header updating; | ||
| - | } | ||
| - | |||
| - | |||
| - | location ~*^.+(swf|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav| | ||
| - | bmp|rtf|js)$ { | ||
| - | proxy_pass http:// | ||
| - | proxy_cache cache; | ||
| - | proxy_cache_valid 2d; | ||
| - | expires max; | ||
| - | } | ||
| - | |||
| - | |||
| - | location ^~ (^/ | ||
| - | proxy_pass http:// | ||
| - | } | ||
| - | |||
| - | error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505 506 507 / | ||
| - | |||
| - | location = /error.html { | ||
| - | root / | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | ^ options | ||
| - | | listen | ||
| - | | server_name | nom de domaine du serveur arrière, possibilité d'en spécifier plusieurs| | ||
| - | | error_page | ||
| - | | proxy_pass | indique l' | ||
| - | | proxy_cache_valid 12h | toutes les pages retournant avec un code 200 301 et 302 seront stockées en cache pendant 12 heures. Il est possible de spécifier les codes html pour lesquels les fichiers doivent être mis en cache| | ||
| - | | proxy_cache | indique la zone de stockage pour le cache | | ||
| - | | proxy_cache_use_stale | Si le serveur arrière renvoi ces erreurs error timeout invalid_header updating nginx servira les fichiers qu'il possède en cache| | ||
| - | | expires max | donne une date d' | ||
| - | |||
| - | Quelque explications sur notre configuration. Comme vous l'avez vu toutes les requêtes ne sont pas traitées de la même manière. Différentes règles ont été crées pour séparer les contenus. | ||
| - | |||
| - | * Si l' | ||
| - | * Si l' | ||
| - | * Si l' | ||
| - | * Si l' | ||
| - | |||
| - | Comme vous pouvez vous rendre compte dans certains cas plusieurs règles sont remplis. Il y a donc une hiérarchie parmi ces règles. La documentation officielle traite de ce sujet [[http:// | ||
| - | |||
| - | Pour résumé voici la hiérarchie | ||
| - | |||
| - | - = Lorsque l' | ||
| - | - ^~ Lorsque l' | ||
| - | - ~ Les expressions régulières sont analysés dans leur ordre d' | ||
| - | - Finalement la règle location / correspondant à tous les cas est appliquée dans le cas ou l' | ||
| - | |||
| - | Vous avez peut être remarqué dans le fichier de configuration une petite étoile après la vague ~* . Cela indique que la règle n'est pas sensible à la case. | ||
| - | |||
| - | Il suffit pour activer ce serveur de créer un lien symbolique pointant vers le fichier précédent dans le répertoire | ||
| - | |||
| - | sudo ln -s / | ||
| - | | ||
| - | === Load balancing === | ||
| - | |||
| - | Il est possible de faire du load balancing avec nginx d'une manière assez simple. Il suffit de déclarer un groupe de serveurs et d' | ||
| - | |||
| - | Voici l' | ||
| - | |||
| - | < | ||
| - | upstream backend | ||
| - | server backend1.example.com weight=5; | ||
| - | server backend2.example.com: | ||
| - | server unix:/ | ||
| - | } | ||
| - | |||
| - | server { | ||
| - | location / { | ||
| - | proxy_pass | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Voir aussi ===== | ||
| - | |||
| - | * **(fr)** [[: | ||
| - | * **(en)** [[https:// | ||
| - | * **(fr)**[[http:// | ||
| - | * **(en)**[[http:// | ||
| - | |||
| - | ---- | ||
| - | // | ||
