AXOPEN

NGINX – WordPress avec SSL et SPDY et le cache FASTCGI

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é.

NGINX avec SSL SPDY FastCgi CACHE

Pourquoi utiliser SSL (HTTPs)?

Voici trois bonnes raisons d’utiliser SSL:

  • Premièrement SSL offre une intégrale sécurité pour vos utilisateurs, personne entre vous (serveur) et le client ne peut lire les données qui transitent.
  • Le client est donc rassuré de voir le petit canevas vers dans l’url.
  • Le référencement de votre site est amélioré. En effet depuis peu, Google rajoute des « points bonus » pour les sites en HTTPs donc nécessitez pas et franchissez le cap.

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.

Pré-requis pour utiliser SSL

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:

  • bundle.crt;
  • monsite.com.key;
  • monsite.com.crt

Installation NGINX avec SPDY:

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:

  • De recompiler son propre nginx depuis les source (recommandée)
  • De passer en version Testing de DEBIAN et d’installer la version extra de NGINX qui supporte SPDY.

Configuration de NGINX avec SPDY et SSL

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;
}
}

Utilisation du cache NGINX FastCGI.

Ici nous utilisons FastCgi pour traiter nos requêtes PHP 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.

Conditionner le cache FastCGI NGINX pour WordPress.

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!

Pour en savoir plus sur NGINX: