Nous allons voir comment optmiser de manière impressionante les performances d'un blog Ghost au moyen de quelques éléments de configuration NGinx facilement customisables pour chacun.

Configurer NGinx

Utiliser NGinx pour servir le contenu statique

Ajouter du cache à Nginx

Il vous faudra alors indiquer le chemin de cache à NGInx. Dans ce cas il faut ajouter la ligne ci-dessous dans le la configuration:

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=512m;  

Ensuite il s'agit de mettre en cache les élements 'statiques' comme les images, les scripts, css etc..
Enfin, ghost génère du HTML qui lui aussi peut être caché.
Attention en cachant la partie location / nous améliorons grandement les performances, en ne sollitant plus Ghost, mais le cache doit être renouvellé pour qu'un ajout ou une modification de post soit servie par NGinx...

Par contre, il ne faut pas cacher la partie admin de ghost pour des raisons évidentes.

Exemple de configuration finale

Voici un fichier de proxy_params dans /etc/nginx/:

proxy_set_header Host $http_host;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_set_header X-Forwarded-Proto $scheme;  

Avec cela, ci-dessous un exemple de fichier de configuratiuon de site:

include /etc/nginx/proxy_params;  
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=512m;  
proxy_cache_key "$scheme$proxy_host$uri$is_args$args";  
proxy_cache_valid 200 302 10m;  
proxy_cache_valid 404 1m;  
# add a cache HIT/MISS header
add_header X-Cache $upstream_cache_status;  
# do not show incoming Etags, if-modified-since is sufficient
proxy_hide_header Etag;  
proxy_hide_header X-powered-by;

upstream ghost {  
  server 127.0.0.1:2368;
}

server {  
  listen *:80;
  rewrite     ^   https://$server_name$request_uri? permanent;
  server_name mondomaine.com ;

}

server {  
  listen *:443 ssl;
  server_name mondomaine-dev.com;
  access_log /var/log/nginx/mondomaine.com.log;
  root   <répertoire ghost>;

  ssl_certificate <chemin certif>;
  ssl_certificate_key <chemin  key>;

  # add some caching on static assets
  location ~* \.(jpg|jpeg|png|gif|ico|css|js|eot|woff)$ {
     proxy_cache STATIC;
     proxy_ignore_headers "Cache-Control";
     expires 1M;
     access_log off;

     add_header Cache-Control "public";
     proxy_pass http://ghost;
  }

  location ~ ^/(?:ghost|signout) {
    proxy_pass http://ghost;
  }

  location / {
    proxy_cache STATIC;
    proxy_cache_valid 200 10m;
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
    proxy_ignore_headers "Set-Cookie";
    proxy_hide_header "Set-Cookie";

    add_header Cache-Control "public";
    proxy_pass  http://ghost;
  }
}

Plus

Vous pouvez consulter l'article NGinx - Bloquer les attaques bruteforce pour sécuriser la partie login des attaques butre force.

Sources