Installation d’un Reverse Proxy Nginx

1/52/53/54/55/5 (2 votes, moyenne: 2,50 sur 5)
Loading...
I

Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.


Bonjour à tous,

 

Aujourd’hui, on va voir comment et pourquoi configurer un Reverse Proxy Nginx.

 

Un reverse Proxy, c’est quoi ?

 

Pour cette partie, je vais citer le copain Wikipédia qui a une explication parfaitement convaincante :

Un proxy inverse (reverse proxy) est un type de serveur, habituellement placé en frontal de serveurs web. 
Contrairement au serveur proxy qui permet à un utilisateur d'accéder au réseau Internet, 
le proxy inverse permet à un utilisateur d'Internet d'accéder à des serveurs internes.

 

A quoi ça sert ?

Dans le cas que je vais vous présenter, le reverse proxy va remplir plusieurs fonctions :

  • Serveur de cache : Le proxy Nginx va garder tout le contenu statique comme les images en cache et certains résultats PHP.
  • Serveur de compression : On peut appliquer la compression gzip à notre contenu sur le serveur NGINX
  • Sécurité : Tout notre trafic passe par un point central, c’est donc plus facile de filtrer le trafic

 

 

Pourquoi ne pas installer le serveur web NGINX ?

Simplement car les htaccess sous NGINX sont différents de ceux sous apache, et le problème c’est que la majorité de ce qui a déjà été été développé sur le web est écrit avec des htaccess pour apache.

Par soucis de simplicité donc …

 

 

Exemple concret

 

Installation classique

Dans le cas d’une installation classique, voilà ce qui ce passe :

Installation-d-un Reverse-Proxy-Nginx-02

Le visiteur contacte directement le serveur apache et le serveur Apache doit traiter ET les calculs php Et le contenu statique, sauf que lorsque votre site web va rencontrer un pic de visiteur, Apache va demander beaucoup de mémoire et beaucoup de ressources processeur. Pas bon.

 

Installation avec Nginx en reverse Proxy Cache

Dans le cas d’une installation classique, voilà ce qui ce passe :

Installation-d-un Reverse-Proxy-Nginx-03

Nginx va mettre en cache des requêtes php déjà calculées par le serveur Apache, et il va s’occuper de distribuer tout le contenu statique type javascript, images et autres. La différence c’est que Nginx n’a pas besoin de beaucoup de ressources contrairement à Apache pour faire ce travail.

 

 

En schéma ça donne ça au final :

Installation-d-un Reverse-Proxy-Nginx-01

 

Pré-requis :

Pour nos pré-requis, on va partir du principe que votre ou vos serveurs Apache/Mysql sont configurés et pleinement fonctionnels.

  • Un serveur Ubuntu 12.04 LTS/13.x  ou Debian 6/7
  • Une connexion très haut débit à faible latence vers votre serveur web
  • Être root

 

Pour cet exemple, NGINX n’est pas sur le même serveur que Apache ! Et surtout, cet exemple n’est pas valable avec ISPConfig 3 ! Un article spécial sera fait pour la configuration du proxy NGINX sous ISPCONFIG 3.

 

Installation et configuration :

On va commencer par mettre la liste des sources de Debian à jour, pour ce faire, tapez la commande suivante

nano /etc/apt/sources.list

 

Et ajoutez ces sources après le repository officiel d’OVH

deb http://ftp.de.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

# wheezy-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.de.debian.org/debian/ wheezy-updates main contrib non-free

#NGINX
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx

 

 

Lancez maintenant la commande

apt-get update && apt-get upgrade

 

pour mettre à jour votre installation

Après on va installer Nginx

apt-get install nginx

Ensuite, on va modifier la configuration globale du serveur. Modifiez la ligne « worker_processes » avec le nombre de cœur de votre cpu, par exemple pour un double cœur :

nano /etc/nginx/nginx.conf

 

user www-data;
worker_processes  2;
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;
    
    
    # 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 GZIP
    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)";

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

 

On va maintenant configurer les fonctions reverse proxy et cache

/etc/nginx/conf.d/proxy.conf

 

proxy_redirect          off;
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_hide_header       X-Powered-By;
proxy_intercept_errors on;
proxy_buffering on;


proxy_cache_key "$scheme://$host$request_uri";
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cache:10m inactive=7d max_size=700m;

 

On va maintenant créer le fichier de configuration de notre site dans le dossier sites-enabled de nginx

cd /etc/nginx/sites-enabled/

 

Créer un fichier portant le nom de votre site, par exemple abyssproject.net et éditez le

nano abyssproject.net

 

Et ensuite, on va rentrer la configuration pour le site sur cet exemple :

server {

    listen 80;
    server_name www.abyssproject.net abyssproject.net;

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}


location / {
    proxy_pass http://[ip du serveur apache:80/;
    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://ip du serveur apache:80;
    proxy_cache cache;
    proxy_cache_valid 2d;
    expires max;
}


location ^~ (^/admin|^/identification) {
    proxy_pass http://ip du serveur apache:80;
}

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 /error.html;

location = /error.html {
    root /var/www/nginx-default;
}
}

 

Maintenant, redémarrez le serveur qui héberge Nginx avec la commande suivante :

reboot

 

Testez l’accès a votre site, mais n’oubliez pas de modifier les dns pour qu’ils pointent vers le serveur NGINX et non plus apache !

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

4 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
Flemzord
Flemzord
9 années plus tôt

Bonjour,

Tu peut gagner des performances avec apache2-mpm-worker …
Les performances de celui ci sont globalement très proche des autres solutions existantes
Et la ton NGINX deviens totalement inutile.