Améliorer encore les performances web avec H2O

H2O est un tout nouveau serveur web écrit en C qui support HTTP/2, HTTP/1.1 et qui surpasse les performances déjà importantes de Nginx. H2O Web Server est simple a configurer et son développement avance rapidement, grâce à son concepteur Kazuho Oku. Les benchmarks HO2 vs Nginx qu'il a réalisé, me donne envie de migrer de Nginx vers H2O.

Benchmark H2O web server vs Nginx

Ce benchmark est issu du site web du créateur de H2O web server. Juste impressionnant !

Benchmark

Quelles sont les possibilités du serveur web H2O ?

H2O va vite, il a une empreinte mémoire plus petite que Nginx. H2O propose de nombreuses possibiltés, qui en font un serveur web de choix pour les containers Docker :

  • HTTP/1.0
  • HTTP/1.1
  • HTTP/2.0
  • WebSocket
  • SSL TLS (on a le choix entre OpenSSL et LibreSSL)
  • FastCGI
  • HTTP Only proxy (pour le moment)

Sur le wiki on trouve de nombreux exemples de configuration comme du FastCGI pour WordPress, php-fpm ou Ruby.

Wordpress avec H2O web server

hosts:
  "www.example.com":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /path/to/doc-root   # serve static files if found
        redirect:                     # if not found, internally redirect to /index.php/<path>
          url: /index.php/
          internal: YES
          status: 307

file.custom-handler:                  # handle PHP scripts using php-cgi (FastCGI mode)
  extensions: .php
  fastcgi.spawn: "PHP_FCGI_CHILDREN=10 exec /usr/bin/php-cgi"

access-log: /path/to/the/access-log
error-log: /path/to/the/error-log
pid-file: /path/to/the/pid-file
http2-reprioritize-blocking-assets: ON   # performance tuning option

H2O web server configuration pour php-fpm

hosts:
  "www.example.com":
    listen:
      port: 80
    paths:
      "/":
        file.dir: /path/to/doc-root   # serve static files if found

file.custom-handler:                  # connect to external FastCGI server listening to /tmp/fcgi.sock
  extension: .php
  fastcgi.connect:
    port: /tmp/fcgi.sock
    type: unix

access-log: /path/to/the/access-log
error-log: /path/to/the/error-log
pid-file: /path/to/the/pid-file
http2-reprioritize-blocking-assets: ON   # performance tuning option

Le code source de H2O est disponible sur Github. H2O Web server est développé en C et évolue rapidement. Sa compilation et exécution sur RaspberryPi ne pose aucun problème. J'ai même commencer a préparer un container Docker que je vais bientôt publier sur Docker Registry.

Vous pouvez lire le très bon article du site Calomel.