Outils pour utilisateurs

Outils du site


optimisation:nginx

Lorsque l’on utilise Apache avec du contenu dynamique (avec mod-php5 par exemple), la mémoire utilisée par un processus peut vite devenir importante (6 -30Mo), et elle ne sera pas libérée immédiatement par ce processus. Que ces processus distribuent également le contenu statique (images, css, html, fichiers textes, documents, archives,etc. ) n’est pas forcément le plus adapté.

Traiter ces deux types de contenus par deux processus différents est souvent préférable au niveau des performances. Pour cela, il y a plusieurs solutions envisageables : utiliser mod_proxy et transmettre certaines requêtes à un autres processus Apache, ou utiliser un autre serveur Web reconnu pour ses performances notamment pour le traitement des fichiers statiques.

Pour ce dernier choix, nginx reste la référence utilisé par les plus grands.

* Installation d'eAccelerator :

apt-get install nginx

* Editez le fichier /etc/nginx/nginx.conf :

ser 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;
 
    gzip  on;
    gzip_static on;
    gzip_comp_level 9;
    gzip_min_length 1400;
    gzip_types  text/plain text/css image/png image/gif image/jpeg application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_vary  on;
    gzip_http_version 1.1;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
 
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

La configuration initiale est performante et devrait convenir à une majorité de sites Web. Il est conseillé d’éviter de modifier le nombre de « worker_processes » sauf si vous savez ce que vous faites (serveur multi-core par exemple). L’architecture du processus est largement différente de celle d’Apache et plusieurs processus n’amélioreront pas forcément vos performances.

* Editez le fichier /etc/nginx/sites-available/default :

server {
	listen   80 default;
	#server_name  localhost;
	server_name _;

	#access_log  /var/log/nginx/localhost.access.log;
	access_log off;

	location / {
		proxy_pass http://127.0.0.1:8080/;
	}
}

* Editez le fichier /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;

* Pour les adresses IP des clients avec le proxy, créez /etc/apache2/mods-available/remoteip.conf :

<IfModule mod_remoteip.c>
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1
RemoteIPInternalProxy xxx.xxx.xxx.xxx (ip du serveur)
</IfModule>

* Activer remoteip :

a2enmod remoteip

* Pour chaque site, créez et éditez un fichier /etc/nginx/sites-enabled/site.com :

server {
	listen 80;
	server_name www.site.com;

	access_log  /home/ftp/site.com/log/www/access.log;
	error_log  /home/ftp/site.com/log/www/error.log;

	location / {
		proxy_pass         http://127.0.0.1:8080/;
	}

	location ~* ^.+.(jpg|gif|css|png|js|ico|txt|srt|swf|flv|avi|wmv|mp3)$ {
		root /home/ftp/site.com/www;
		expires max;
	}
}

Il faudra ensuite modifier la configuration de votre serveur Apache pour que celui-ci écoute sur le port 8080. Il ne sera accessible que localement, puisque toutes les requêtes passeront maintenant par nginx.

Pensez à faire une sauvegarde de vos fichiers avant de vous lancer dans les modifications.

Il faut modifier dans tous vos fichiers de configuration Apache les références au port 80, qui devient 8080 ici, ainsi que les références à l’IP de votre serveur, qui devient 127.0.0.1.

* Editez le fichier /etc/apache2/ports.conf :

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

* Puis dans chacun de vos fichier apache :

<VirtualHost *:80>

par

<VirtualHost 127.0.0.1:8080>

* Redémarrez apache et démarrez nginx:

/etc/init.d/apache2 restart
/etc/init.d/nginx start

Un petit problème peut se produire lorsque l’on utilise un reverse-proxy comme dans notre configuration : l’IP des clients affichée par certains scripts PHP sera l’IP du proxy (127.0.0.1 si les deux processus sont sur la même machine). C’est le cas par exemple pour l’IP des commentaires dans WordPress. Pour corriger ce problème, une solution relativement simple existe : l’installation du module rpaf.

apt-get install libapache2-mod-rpaf
a2enmod rpaf
/etc/init.d/apache2 restart
optimisation/nginx.txt · Dernière modification : 2016/04/25 18:26 de linkuff