%

Relayd : Mise en cache web pour httpd

Article publié, le et modifié le
2 minutes de lecture

Cet article contient 397 mots.
Source brute de l'article :
Commit version : e21600e

Description

OpenBSD intègre par défaut dans le système de base, depuis 5.7 :

  • un serveur web, nommé httpd - que j’ai présenté plus ou moins succinctement ici

  • un serveur relay, nommé relayd

  • Site web : https://bsd.plumbing/

  • OpenBSD : 6.6, 6.7


Le problème est que le serveur httpd n’est pas capable de gérer la mise en cache de contenu statique.

Nous passons donc le relais au serveur relayd qui lui en est capable - par contre, il le fait de manière globale, çad non spécifique à un domaine en particulier -

Configuration

Les explications de configuration du serveur httpd ont été abordés sur cet autre article : Relayd : Gestion des entêtes pour httpd (cf : l'exemple de configuration )

C’est exactement le même principe.

relayd

  • Le fichier de configuration est /etc/relayd.conf, par défaut.

Dans le contexte du protocole http, en lui donnant un nom - le nom importe peu, mais est réutilisé plus tard, dans le contexte des déclarations de relais :

  • nous ciblons tous les fichiers contenant normalement du contenu statique, en analysant les requêtes - c’est généralement le cas pour les fichiers, tels que :
    • les images (GIF, JPG, PNG, SVG)
    • les fichiers CSS et JS,
    • et les fichiers HTML, et XML (Atom, RSS, etc).
  • nous leur appliquons une politique d’étiquetage, par l’usage de l’option tag. Là, encore le nom donné importe peu pourvu que vous réutilisiez le même dans le cadre de l’entête header de réponse.
  • puis nous retournons une entête de réponse Cache-Control ciblant l’étiquette.

Puis nous appliquons le protocole http déclaré a un relay cible.

relayd : exemple

Code : relayd

ip4 = "public-address-ipv4"

http protocol "hw" {

    match request path "/*.atom" tag "CACHE"
    match request path "/*.css"  tag "CACHE"
    match request path "/*.gif"  tag "CACHE"    
    match request path "/*.html" tag "CACHE"
    match request path "/*.ico"  tag "CACHE"
    match request path "/*.jpg"  tag "CACHE"    
    match request path "/*.js"   tag "CACHE"
    match request path "/*.png"  tag "CACHE"    
    match request path "/*.rss"  tag "CACHE"
    match request path "/*.svg"  tag "CACHE"
    match request path "/*.xml"  tag "CACHE"

    match response tagged "CACHE" header set "Cache-Control" value "public, max-age=86400"
    
    tcp { nodelay, sack, socket buffer 65536, backlog 100 }
    
    pass

}

relay "www" {
    listen on $ip4 port 80
    protocol hw
    forward to 127.0.0.1 port 80
}

Documentations

Manpages

Autres documentations