Dans cet article, nous allons voir comment configurer WORDPRESS sur NGINX avec un cache FASTCGI, le tout en SSL avec le protocole SPDY de google d’activé.
Voici trois bonnes raisons d’utiliser SSL:
Une quatrième raison un peu plus obscure est qu’en utilisant SSL vous rendez les attaques sur votre site un peu plus compliquées et à l’expérience un site SSL est un peu moins sujet aux attaques.
Il vous faut votre certificat SSL valide que vous avez acheté auprès de votre fournisseur préféré. En pratique quelque chose comme ça:
Pour pouvoir utiliser le protocole SPDY, il faut avoir une version compilée avec. On ne peut pas faire comme dans APACHE l’installation du module seul. Sous Debian, il n’existe pas de version de NGINX supportant SPDY dans la version stable. Il convient donc soit:
Dans un premier temps, on va rediriger l’intégralité du flux HTTP vers le flux HTTPs en utilisant une redirection permanente 301. Ceci peut se faire de la manière suivante en créer un server sur le port 80.
server {
listen 80;
return 301 https://$host$request_uri;
}
Maintenant, chaque visiteur demandant une page sur le port 80 (http) se verra redirigé vers la même page en HTTPs. Pour information, il est important de faire une redirection 301 pour le référencement afin que Google comprenne bien que le site se trouve désormais en HTTPs.
Maintenant nous allons configurer le serveur qui va écouter sur le port 443 (HTTPs).
Ici rien de plus simple, il suffit de mettre SSL on et de mettre les chemins vers les certificats SSL.
On remarque néanmoins l’ajout de SPDY dans la ligne listen qui permet de dire à NGINX d’utiliser le protocole SPDY quand il est possible de le faire avec le navigateur, ce qui permet d’accélérer les échanges entre le serveur NGINX et le client web.
server {
listen 443 ssl spdy;
root /var/www/monsite.com/;
index index.php;
server_name monsite.com;
ssl on;
ssl_certificate /etc/ssl/monsite/bundle.crt;
ssl_certificate_key /etc/ssl/monsite/monsite.com.key;
ssl_client_certificate /etc/ssl/monsite/monsite.com.crt;
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^/[^/]+(/.*.php)$ $1 last;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri /index.php;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Ici nous utilisons FastCgi pour traiter nos requêtes PHPLangage de programmation s’exécutant côté serveur et permettant la création dynamique de pages web ou d'APIs. vers le blog WORDPRESS. Pour améliorer sensiblement les performances, nous pouvons mettre en place un cache au niveau d’NGINX, ce qui va accélérer de manière drastique les performances et les temps de réponses du site web.
Pour configurer un cache FASTCGI, il faut d’abord expliquer à NGINX ou stocker son cache, ceci se fait avec les lignes suivantes:
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=WORDPRESS:500m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
Ici le cache sera stocké dans le répertoire de NGINX et s’appelera WORDPRESS. Sa taille MAX sera de 500m et sa temps de vie pour une page sera de 60 minutes. Afin de s’assurer, et de forcer le cache à être utiliser, on peut dire à NGINX de ne pas prendre en compte les headers HTTP Cache control et Expires. avec la ligne:
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
Maintenant que le cache est créé, il suffit de l’utiliser dans la partie location /
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 60m;
On remarque ici, la variable $no_cache que nous allons renseigner qui permet de dire quand il utile de ne pas utiliser le cache, par exemple dans le backoffice de WORDPRESS (wp-admin). Sinon si vous utiliser le cache dans le backoffice, le blog va faire n’importe quoi.
On va donc utiliser des tests pour remplir cette variable NGINX $no_cache.
set $no_cache 0;
if ($request_method = POST)
{
set $no_cache 1;
}
#Don’t cache if the URL contains a query string
if ($query_string != "")
{
set $no_cache 1;
}
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
set $no_cache 1;
}
Ici nous créons la variable et nous choissons les règles d’exclusions de l’utilisation du cache NGINX pour WORDPRESS.
Et voilà, nous avons configuré NGINX avec SSL et SPDY en utilisant le cache FASTCGI. Au final avec une configuration comme celle-ci on obtient des temps de réponse largement inférieur à la seconde!