Mise en place d’un CDN via Google App Engine

Plop à tous ….

ça fait un certain temps déjà que j’essai de voir pour utiliser différents systèmes de cache de contenu pour alléger la charge de mon dédié (un RPS), après avoir testé plusieurs systèmes, j’ai opté pour le système de CDN CirruxCache, qui utilise le Google App Engine (et oui google est partout), le gros avantage du système c’est que c’est fournit par les serveurs de GG (donc super rapide et tout et tout) et écrit en python, ce qui m’a permis de faire une petite modif sympa pour spécifier un TTL spécifique sur le type de fichier.

La mise en place est très simple, on crée son compte sur appengine.google.com, on crée son appli, qui nous retourne un identifiant.
Une fois que l’on a un identifiant on modifie le fichier app.yaml et on modifie la ligne commençant par application par :

application: identifiant-de-l'appli

Il faut encore modifier le fichier app.py pour spécifier notre Url :

urls['default'] = (
		'/_cron/(.*)', 'Cron',
		'(/.*)', 'Www'
		)

# POP definition
# You can define and configure your Point Of Presence

class Www(cache.Service):
	origin = 'http://votre site web'
	allowFlushFrom = ['127.0.0.1']
	forceTTL = 86400 # 1 day
	ignoreQueryString = True
	forwardPost = True

Pour ma part, comme les images ne changent pas beaucoup, j’ai voulu spécifier un TTL différent pour certain types de fichiers, pour ce faire, il faut modifier le fichier lib/cache.py et mettre tout en haut de la fonction getMaxAge (à la fin du fichier) :

		if 'content-type' in headers:
			#check type
			header = headers['content-type']
			n = header.find("image")
			if n != -1:
				return 2592000

Ce qui permettra d’avoir un TTL d’un mois pour les images!!

Ensuite il suffit d’uploader l’application via l’utilitaire de Google AppEngine :

./appcfg.py update dossier/de/l'appli

Dans le cas d’un blog wordpress, deux choses peuvent être utile :
une règle htaccess pour forcer le téléchargement des images sur le CDN (remplacer cdn-blog-loupzeur.appspot.com par votre url de CDN) :

RewriteCond %{HTTP_USER_AGENT} !^CirruxCache
RewriteRule ^(.*)\.(gif|png|jpg|jpeg) http://cdn-blog-loupzeur.appspot.com/$1.$2 [R=301,L]

Ne pas oublier le RewriteCond, sinon ça boucle et ça retourne une erreur 500

Et la deuxième chose très importante, l’installation du plugins OSSDL CDN off-linker, qui va permettre de remplacer directement les urls des images/css/js du site par l’url du CDN.

Et comme ça, 90% des requêtes passeront par votre CDN, et les visiteurs ne téléchargeront que la page html.

Bien entendu, comme c’est un système de cache qui fonctionne aussi pour les pages web, il faut penser à rajouter un fichier robots.txt en disallow: / pour éviter le Duplicate Content du CDN (si vous n’utilisez pas le CDN en reverse).