Caddy

Download und Module

Großer Nachteil von Caddy: man muss die Module beim Download angeben/wissen, oder das Ding jedes Mal neu kompilieren, weil es ein monolitisches App ist. Ich verwende die folgenden Module:

env CADDY_TELEMETRY=off curl https://getcaddy.com | bash -s personal http.cache,http.expires,http.minify,hook.service

hook.service ist für die Bereitstellung von Caddy als Service unter Windows/Linux/OS X.

Config

root {{%DOCROOT%}}
ext .md
markdown / {
  template /templates/default.html
  ext .md .txt
  css css/master.css
  js js/master.js
}

{{%DOCROOT%}} wird beim Ein/Auschecken entsprechend angespasst, damit ich eine Dev und eine Prod Version haben kann ohne dass ich das Caddyfile duplizieren muss. Der Rest erklärt sich selbst: jedes .md File wird von Caddy in HTML geparsed, der Cache erleichtert das auch anständig, und die Templates werden eingelesen als Wrapper.

expires {
  match css/master.css 1i
  match .css$ 1w
  match .md$ 1h
  match .js$ 1w
  match .png$ 1d
  match .ico$ 2w
  match .jpg$ 2w
  match .webp$ 2w
  match .woff2$ 2w
}

Expires muss sein :)

rewrite {
  if {>Accept} has image/webp
  r ^(.+)\.(jpg|jpeg|png)$
  to {1}.webp {path} {path}/
}

Wenn der Client "webp" annimmt, dann schicken wir das.

Und dann noch push / /css/master.css irgendwo hin, damit der HTTP/2 Push für das Master-CSS File auch klappt.