nginx Installation de NginX en reverse proxy




Plateforme matérielle:
Dedibox QC
  • Serveur Dell® PowerEdge R210
  • CPU: 1x Intel® Xeon® X3450 4x 2.66GH
  • RAM: 8 Go DDR3 ECC
  • HDD: 2 x 1 To SATA2 Raid 0 / Raid 1 HARD
  • LAN: 1 Gbit/sec
Juqu'a maintenant j'utilisait la fonction NAT de Xen pour tout mes domU

Plateforme logicielle:
  • Dom0 Opensuse 11.3 X86_64 Xen 4
Plateforme Virtuelle:

  • DomU Xen Ubuntu 10.04 X86_64 Paravirtualisé
  • 2 vcpus 
  • 512 Mo de Ram

Mon DomU Xen me servant pour mon serveur Web est depuis un moment composé seulement dun serveur apache qui distribuait mes différents sites ( blogs, galerie photos, perso etc..).
J'ai 10 virtualhosts qui ont très peu d'activité. Cela me suffit amplement pour l'affluence de mon site.

Dans un soucis de tester et pour améliorer un peu les performances, j'ai décidé de tester NginX.

L'idéal est bien sur de migrer tout le site sur Nginx mais ca demande pas mal de boulot.

J'ai donc décidé de tester NginX en reverse proxy.

C'est donc lui qui va distribuer les pages et faire le tampon/cache entre les clients et Apache.

Le cache est très interessant pour les pages statiques, ce qui m'arrange car j'ai migré mon blog recemment sur PluXml.

Installation de NginX:

#apt-get install nginx


Configuration de /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;
server_names_hash_bucket_size 64;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/html text/css image/x-icon application/x-javascript;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Le paramétrage est simple 2 processus capable d'accepter 1024 connexions chacun
On peut affiner les réglages en fonction de sa conf
Moi je suis parti du principe de mettre autant de process que de Vcpus présents dans mon DomU


configuration de /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;
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 64k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_busy_buffers_size 64k;


Configuration de /etc/nginx/sites-enabled/

server {

        listen   80;

        server_name  info16.fr;
        access_log /var/log/bloginfo16.access.log;
       error_log /var/log/bloginfo16.nginx_error.log debug;
        location / {           
proxy_pass http://127.0.0.1:8080/;
        }

        error_page  404 /404.html;

        # redirect server error
pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
    
root   /var/www/nginx-default;

        }

La config est assez claire, on lui dit que pour le domaine info16.fr pointer vers 127.0.0.1:8080/


Par conséquent le serveur apache ne doit plus écouter sur 80 mais bien sur le port 8080:

Penser à modifier le /etc/apache2/ports.conf avec

Listen 8080

Ainsi que vos Vhosts vous devez remplacer le port 80 par 8080.
pour ma part j'ai aussi remplacé mes 192.168.1.1 ( ip locale de mon domU Xen) par 127.0.0.1 dans tous les vhosts.

Redemarrer apache2 et NginX et tester:


Voici les résultats obtenus grâce au site Loadimpact.com ; un site qui permet de simuller des clients en parallèle sur le site.
La version gratuite peut monter à 50 clients simultanés; C'est peu mais ca donne une idée...

  • Apache seul:



  • NginX en reverse proxy en frontal d'Apache


Le résultat parle de lui même de 1 à 50 clients simultanés la config Apache de base le serveur renvoie la page entre 900ms et 1600ms

Avec NginX cela reste stable et la réponse est renvoyé en environ 475ms ( pres de 2 fois plus vite et 4 fois avec 50 clients)

sources: korben Nicolargo