Parle moi en russe
Voila depuis quelques jours je me suis mis au russe . Pourquoi le russe il semblerait que la vodka soit bonne et les femmes plutôt grande et blonde . Donc il devient primordial pour moi d’apprendre cette langue .
Haltes aux stéréotypes et concentrons nous un peu sur Nginx qui vous le savez tous est un navigateur http/reverse proxy.
La principale fonctionnalité que permet nginx est de pouvoir séparer le contenu statique du contenu dynamique comme le ferais lighthttpd et encore apache via le mod_proxy.
Installation
On commence déjà par modifier notre source.list
deb http://nginx.org/packages/debian/ squeeze nginx deb-src http://nginx.org/packages/debian/ squeeze nginx
Je ne vous dis pas qu’il faut faire un update de votre source.list
apt-get install nginx php5-cgi
Configuration du lancement des process php
Créer un fichier php5-cgi dans /etc/init.d/ et coller y le contenu de ce fichier que vous pouvez télécharger ici .
Mettre les droits en exécution puis ajouter le script au démarrage automatique
cd /etc/init.d/ chmod +x php5-cgi update-rc.d php-fcgi defaults
Configuration global de nginx
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; gzip_static on; gzip_vary on; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Par rapport à une conf par défaut j’ai rajouté la compression gzip et deux includes pour ne pas être trop perdu par rapport à apache mais ce dernier point n’est qu’un détails.
Configuration du FastCGI
fastcgi_split_path_info ^(.+\\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Configuration du vhost pour WordPress
server { listen 80; server_name monsite.com www.monsite.com; root /var/www/path.mon.site.com; index index.php index.htm index.html; #LOGS access_log /var/log/nginx/monsite.com/logs/nginx_access.log main; error_log /var/log/nginx/monsite.com/logs/nginx_error.log; #Définiton des paramètres cgi location ~ \\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } include /etc/nginx/conf.d/wordpress; include /etc/nginx/conf.d/security; if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } #Redirige monsite.com vers www.monsite.com if ($host ~* ^monsite\\.com$) { rewrite ^(.*) http://www.monsite.com$1 permanent; break; }
On peut apercevoir deux includes . Contenu du fichier security
location ~ /\\. { deny all; }
Le contenu du fichier WordPress sera vu un peu plus tard .
A ce moment de l’histoire vous avez nginx et php5-cgi qui sont fonctionnels .
Bench apache vs nginx
L’heure du verdict
Avec Nginx
$ ab -c 5 -t 30 http://www.robertain.com/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.robertain.com (be patient) Finished 67 requests Server Software: nginx/1.2.0 Server Hostname: www.robertain.com Server Port: 80 Document Path: / Document Length: 70329 bytes Concurrency Level: 5 Time taken for tests: 30.171 seconds Complete requests: 67 Failed requests: 48 (Connect: 0, Receive: 0, Length: 48, Exceptions: 0) Write errors: 0 Total transferred: 4976472 bytes HTML transferred: 4957231 bytes Requests per second: 2.22 [#/sec] (mean) Time per request: 2251.580 [ms] (mean) Time per request: 450.316 [ms] (mean, across all concurrent requests) Transfer rate: 161.08 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 25 38 15.3 35 87 Processing: 1821 2086 89.1 2101 2268 Waiting: 428 750 72.7 751 997 Total: 1845 2124 96.3 2137 2355 Percentage of the requests served within a certain time (ms) 50% 2137 66% 2147 75% 2162 80% 2163 90% 2190 95% 2306 98% 2335 99% 2355 100% 2355 (longest request)
Mon CPU est au taquet près de 90% utilisation de la RAM plutôt correct . 95% des requêtes sont servit en 2306 ms
Avec Apache
$ ab -c 5 -t 30 http://www.robertain.com/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.robertain.com (be patient) Finished 56 requests Server Software: Apache Server Hostname: www.robertain.com Server Port: 80 Document Path: / Document Length: 70329 bytes Concurrency Level: 5 Time taken for tests: 31.623 seconds Complete requests: 56 Failed requests: 40 (Connect: 0, Receive: 0, Length: 40, Exceptions: 0) Write errors: 0 Total transferred: 4198282 bytes HTML transferred: 4183102 bytes Requests per second: 1.77 [#/sec] (mean) Time per request: 2823.504 [ms] (mean) Time per request: 564.701 [ms] (mean, across all concurrent requests) Transfer rate: 129.65 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 25 30 5.5 28 50 Processing: 2100 2643 819.5 2208 4986 Waiting: 730 1091 581.2 819 2826 Total: 2125 2673 819.0 2247 5012 Percentage of the requests served within a certain time (ms) 50% 2247 66% 2499 75% 2817 80% 2984 90% 3483 95% 4971 98% 4989 99% 5012 100% 5012 (longest request)
Le CPU a une charge quasi similaire à Nginx seul . 95% des requêtes sont servit en près de 5000 ms . Ce qui correspond à un gain de 46% pour Nginx .Le nombre de page par secondes est également supérieur pour Nginx . On passe de 1.77 pour apache à 2.22 pour Nginx.
Ceci ne sont que des bench à base de ApacheBenchmark les résultats sont des bons indicateurs mais pour des bench plus poussés (= euros) . Je vous conseil des outils plus adaptés .
Allons plus loin
Comme vu plus haut nous avions un include qui redirige vers un fichier wordpress . Ce fichier n’est autre que nginx.conf qui se trouve à la racine de votre site . Il vous suffit de le copier dans le bon répertoire .
Alors pour optimiser davantage notre blog , wordpress fournit une multitude de greffons . Dont le WP total cache . Qui comme son nom l’indique est un système de cache qui nous permettra d’accélérer grandement les perf de notre blog .
Il faut suffit d’installer le plugin depuis votre interface rien de bien compliqué . Si vous ne savez pas le faire voici pour vous .
Bench avec option PageCache du WP TotalCache
Avec nginx et WP total cache avec option PageCache
ab -c 5 -t 30 http://www.robertain.com/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.robertain.com (be patient) Finished 214 requests Server Software: nginx/1.2.0 Server Hostname: www.robertain.com Server Port: 80 Document Path: / Document Length: 70537 bytes Concurrency Level: 5 Time taken for tests: 30.030 seconds Complete requests: 214 Failed requests: 0 Write errors: 0 Total transferred: 15239382 bytes HTML transferred: 15173110 bytes Requests per second: 7.13 [#/sec] (mean) Time per request: 701.625 [ms] (mean) Time per request: 140.325 [ms] (mean, across all concurrent requests) Transfer rate: 495.59 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 23 53 205.3 35 3027 Processing: 312 644 567.2 514 4891 Waiting: 26 42 34.4 37 448 Total: 339 697 606.1 554 4927 Percentage of the requests served within a certain time (ms) 50% 554 66% 563 75% 567 80% 580 90% 700 95% 2044 98% 3011 99% 3583 100% 4927 (longest request)
Les chiffres parlent d’eux mêmes non ? Nous avons un gain énorme sur le nombre de page traité à la seconde 7.17 contre 2.22 avec nginx sans cache . 95% des requetes sont servis en près de 2000ms ce qui correspond à un gain de près de 50% par rapport à apache . Et un gain de près de 88% par rapport à Nginx sans cache .
Cerise sur le gateau le CPU se touche complétement . Je n’éxcéde pas les 5% et le load est inférieur à 0.10 .
Le gain en perf avec le WP total cache est vraiment excellent . Biensur cela me pousse à voir un peu les autres options .
T’en veux encore un peu
Bench avec l’option Minify + PageCache activé
ab -c 5 -t 30 http://www.robertain.com/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.robertain.com (be patient) Finished 246 requests Server Software: nginx/1.2.0 Server Hostname: www.robertain.com Server Port: 80 Document Path: / Document Length: 70523 bytes Concurrency Level: 5 Time taken for tests: 30.012 seconds Complete requests: 246 Failed requests: 245 (Connect: 0, Receive: 0, Length: 245, Exceptions: 0) Write errors: 0 Total transferred: 17604020 bytes HTML transferred: 17527760 bytes Requests per second: 8.20 [#/sec] (mean) Time per request: 609.992 [ms] (mean) Time per request: 121.998 [ms] (mean, across all concurrent requests) Transfer rate: 572.83 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 24 36 8.7 35 68 Processing: 285 567 321.1 509 2802 Waiting: 26 80 291.8 36 2124 Total: 316 603 319.8 544 2826 Percentage of the requests served within a certain time (ms) 50% 544 66% 554 75% 562 80% 573 90% 625 95% 809 98% 2562 99% 2638 100% 2826 (longest request)
La on dit Jackpot , cela se passe de commentaire .
Conclusion
La migration de apache vers nginx n’est pas plus compliqué qu’une migration de nagios vers shinken mais nécessite un peu plus d’investissement .
Coté perf les résultat sont la . Si vous utiliser WordPress je vous conseil chaudement le plugins Wp Total Cache.
Cet article Parle moi en russe est apparu en premier sur Guest Blog.