Partager des ressources entre plusieurs serveurs

Lorsque nous créons un site web, il peut arriver éventuellement que nous aillons besoin de plusieurs serveurs pour partager les ressources aux utilisateurs. Ceci est surtout important lorsque nous partageons de gros fichiers, tel des vidéos. Voici une technique pour partager entre plusieurs serveurs, tout en protégeant le contenu dans une section qui a besoin d’authentification d’utilisateurs.

Le problème est que nous ne pouvons pas garder une session entre différent serveurs (à part avec certaines configuration avancées qui ne sont pas toujours disponible sur les hébergeurs). Nous devons donc garder une donnée du côté client pour éviter qu’il aie à se connecter avec son mot de passe sur tous nos serveurs; une seule fois est bien suffisante.

Pour ce faire, vous aurez besoin de:

  • Plusieurs hébergeurs de site web tel (Funio (anciennement iWeb), Canaca, …)
  • Un serveur DNS pour gérer des sous-domaines (tel DynDNS)

Si vous avez le domaine exemple.com, vous créez les sous-domaines ainsi:

  • www.exemple.com -> Funio
  • site1.exemple.com -> Funio
  • site2.exemple.com -> Canaca

Ensuite, le site www.exemple.com doit créer un cookie disponible pour le domaine et les sous-domaines. Ce cookie pourrait s’appeler « auth » et contenir la date qu’il a été créé. Il sera rafraichi à chaque accès à une nouvelle page. Du côté de la ressource, elle doit vérifier que cette date ne soit pas expirée. Vous pouvez choisir 10-20 minutes par exemple. Ainsi, ce cookie ne pourra pas être copié à d’autres personnes. De plus, cette valeur doit être cryptée pour éviter qu’un utilisateur la crée. Vous pouvez utiliser une clé symétrique étant donné qu’elle ne sera connue que de vos serveurs. Donc en résumé:

  • Un cookie nommé « auth » pour le domaine entier
  • Le contenu doit être la date et l’heure courante cryptée

Pour terminer, toujours sur le site www.exemple.com, il faut accéder à la ressource en sélectionnant au hasard, en round-robbin ou avec un autre algorithme quel sous site (1 ou 2) à afficher.