Cette année, nous avons déployé notre nou­velle charte gra­phique, lan­cé l’offre VPS, ouvert notre nou­velle infra­struc­ture phy­sique (100% SSD) à tous et com­men­cé à mettre à jour les ver­sions de nos bases de don­nées.

Aujourd’hui, nous annon­çons le déploie­ment de la nou­velle ver­sion de notre reverse-proxy alproxy qui s’est ter­mi­né en début de semaine sur tous nos ser­veurs. Cette mise à jour marque une nou­velle étape vers la moder­ni­sa­tion de nos ser­vices, et pour savoir ce qui change, sui­vez le guide !

Reverse pro – quoi ?

Généralement, un seul pro­gramme a la tâche de gérer tout le tra­fic HTTP d’un ser­veur. Les ser­vices d’alwaysdata fonc­tionnent un peu dif­fé­rem­ment : chaque compte a son propre démon HTTP (Apache) qui sert ses pages web. Cette spé­ci­fi­ci­té donne plus de contrôle à nos uti­li­sa­teurs : par exemple, ils peuvent choi­sir la ver­sion de PHP qu’ils sou­haitent uti­li­ser, ou char­ger des modules Apache per­son­na­li­sés.

Non seule­ment cette stra­té­gie offre plus de flexi­bi­li­té (comme la pos­si­bi­li­té de s’interfacer avec son vieux ser­veur d’entreprise sous Windows, de quoi faire peur aux plus jeunes), mais elle nous per­met aus­si de mieux iso­ler les comptes qui se par­tagent un même ser­veur.

alproxy5-schema1

C’est pour gérer cette spé­ci­fi­ci­té de notre archi­tec­ture tech­nique que nous avons eu besoin d’alproxy : alproxy reçoit une requête HTTP émise par un visi­teur, regarde le site des­ti­na­taire, et dirige cette requête au démon HTTP char­gé de ser­vir le site. alproxy est un peu le gar­dien qui dis­tri­bue le cour­rier dans l’immeuble.

schema2_fr

Mais alproxy ne fait pas que rou­ter les requêtes et réponses. Il a aus­si et sur­tout pour res­pon­sa­bi­li­té de veiller à la bonne san­té du démon HTTP de chaque compte : il le démarre s’il est éteint, l’arrête quand il est inac­tif depuis long­temps (pour éco­no­mi­ser la mémoire vive du ser­veur) et le relance quand sa confi­gu­ra­tion a chan­gé ou qu’il a plan­té.

Enfin, alproxy s’occupe de la couche de chif­fre­ment du tra­fic HTTPS, le tout dyna­mi­que­ment : son com­por­te­ment est pilo­té depuis l’interface d’administration d’alwaysdata, plu­tôt que décrit dans des fichiers de confi­gu­ra­tion.
schema3_fr

Les nouveautés d’alproxy

alproxy est un com­po­sant cen­tral de notre pile tech­nique, cette nou­velle ver­sion apporte logi­que­ment des amé­lio­ra­tions sur de nom­breux aspects.

HTTPS mieux sécurisé que jamais et plus besoin d’une IP dédiée

Pour nos uti­li­sa­teurs, cette mise à jour signi­fie des amé­lio­ra­tions immé­dia­te­ment dis­po­nibles, notam­ment du côté de HTTPS. Le tra­fic sécu­ri­sé est main­te­nant ser­vi dans le res­pect des recom­man­da­tions les plus modernes (note A sur SSLabs par défaut) : TLS 1.2, confi­den­tia­li­té accrue (for­ward secre­cy). Encore plus pra­tique : grâce au SNI il n’est plus néces­saire de louer une IP dédiée pour para­mé­trer son cer­ti­fi­cat SSL !

Nous tra­vaillons acti­ve­ment à la géné­ra­tion auto­ma­ti­sée de cer­ti­fi­cats gra­tuits Let’s Encrypt : bien­tôt, vous pour­rez acti­ver HTTPS auto­ma­ti­que­ment pour tous vos sites (et tous vos domaines). Nous ajou­te­rons bien­tôt le sup­port d’OCSP et la ges­tion des ses­sions TLS, qui offrent quelques amé­lio­ra­tions côté per­for­mances.

Plus de robustesse, c’est toute une classe de problèmes potentiels qui disparait

La nou­velle archi­tec­ture d’alproxy est plus robuste. Cela signi­fie que toute une classe de pro­blèmes est auto­ma­ti­que­ment détec­tée et cor­ri­gée, mais aus­si qu’alproxy réagit mieux en cas de sur­charge (lors de DDoS par exemple).

Utilisez Apache, Nginx, Node.js ou le serveur HTTP de votre choix… ou tout ça en même temps

Très pro­chai­ne­ment, nous allons per­mettre à tous nos uti­li­sa­teurs de confi­gu­rer encore plus fine­ment leurs ser­vices, et de choi­sir les démons HTTP qu’ils sou­hai­te­ront uti­li­ser pour leurs sites. Cela signi­fie qu’il sera pos­sible de rem­pla­cer Apache par Nginx, Node.js, ou même d’utiliser les trois en même temps sur un même compte !

Les plus témé­raires pour­ront tes­ter le ser­veur HTTP exo­tique de leur choix et lais­ser alproxy net­toyer en cas d’accident.

Les WebSockets sont disponibles

Naturellement, il serait frus­trant de pou­voir uti­li­ser un ser­veur HTTP moderne sans pro­fi­ter de fonc­tion­na­li­tés modernes, c’est pour­quoi nous avons ajou­té le sup­port de WebSocket dans alproxy.

D’autres évolutions à venir

Il est encore tôt pour par­ler de HTTP/2 (un gros chan­tier pour nous), mais pour patien­ter, nous avons tout de même pré­vu de nom­breuses fonc­tion­na­li­tés dans les mois à venir. Dans la liste, il y a notam­ment un fire­wall appli­ca­tif (WAF) qui bloque les requêtes mal­veillantes (géné­ra­le­ment effi­cace contre les bots qui exploitent des failles dans des logi­ciels comme WordPress) et un cache HTTP, qui per­met d’accélérer le ren­du de votre site et de construire un CDN.

Sous le capot

Pour finir cette pré­sen­ta­tion d’alproxy, par­lons un peu tech­nique.

Le déve­lop­pe­ment d’alproxy a été l’occasion pour nous de rele­ver de nom­breux chal­lenges. Il est déve­lop­pé en Python et repose essen­tiel­le­ment sur asyn­cio. Il tire par­tie de nom­breuses nou­velles fonc­tion­na­li­tés de Python (ver­sion 3.5) : autant dire que nous avons essuyé quelques plâtres (la pein­ture est encore un peu fraîche par­fois). Nous en avons pro­fi­té pour déve­lop­per async­test, que nous avons choi­si de rendre dis­po­nible en open-source. Nous espé­rons avoir l’occasion de publier quelques articles tech­niques pour vous en par­ler plus lon­gue­ment. Ce sera aus­si l’occasion de décrire com­ment nous avons réus­si à gérer la négo­cia­tion TLS avec du code asyn­chrone.

Vers un service toujours plus riche

Nous conti­nuons notre route vers une nou­velle pla­te­forme tou­jours plus riche : always­da­ta va bien­tôt lan­cer son nou­vel envi­ron­ne­ment de pro­duc­tion, qui inclu­ra notam­ment des ver­sions à jour de PHP, Ruby et Python, et la sim­pli­fi­ca­tion de la ges­tion des dépen­dances (com­po­ser, pip, gem ou npm fonc­tion­ne­ront nati­ve­ment).

Les comptes exis­tants béné­fi­cie­ront de toutes ces nou­veau­tés pro­gres­si­ve­ment : le temps de nous assu­rer que la migra­tion vers ce nou­vel envi­ron­ne­ment ne per­tur­be­ra pas le bon fonc­tion­ne­ment de vos sites en pro­duc­tion.