Caddy2 als Webserver für Hugo-Webseite

Sie möchten den modernen Webserver Caddy einsetzen und haben eine Webseite auf Hugo-Basis? Lesen Sie mehr!
     

Nach meinem Ausflug auf Hugo habe ich mich immer mal wieder über die für meinen Zweck völlig überdimensionierten Webserver-Kandidaten Apache und nginx geärgert – ich will doch einfach nur simple HTML-Dateien mit SSL bereitstellen…

Der Retter: Caddy!

Ich möchte in diesem Beitrag gar nicht auf die Unterschiede, Vor- und Nachteile zwischen Apache, nginx und Caddy eingehen, sondern nur kurz aufzeigen, wie mein Caddyfile für diese Webseite aussieht – quasi als Basis für eure eigenen Hugo-Webseiten.

Die Installation von Caddy ist denkbar einfach und hier beschrieben. Die Dokumentation rund um Caddy ist auch ziemlich gut und die Community recht aktiv – der Umstieg sollte euch also nicht allzu schwer fallen (bei mir war es eine Sache von rund 10 Minuten).

Zurück zum Thema: mein Caddyfile! So sieht es aus:

## Snippets ##

(static) {
  @static {
    file
    path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.woff2 *.json
  }
  header @static Cache-Control max-age=5184000
}

(404) {
  handle_errors {
    @404 {
      expression {http.error.status_code} == 404
    }
    rewrite @404 /404.html
    file_server
  }
}

# Websites

www.pratt.de {
  redir https://pratt.de{uri} permanent
}

dominicpratt.de {
  redir https://pratt.de{uri} permanent
}

www.dominicpratt.de {
  redir https://pratt.de{uri} permanent
}

pratt.de {
  root * /var/www/pratt.de
  file_server
  encode zstd gzip

  import static
  import 404

  redir /feed/ https://pratt.de/index.xml permanent
}

Los geht’s mit zwei kleinen Snippets – das erste static setzt für gewisse Dateiendungen den Cache-Control-Header, das zweite Snippet 404 redirected die 404-Fehlerseite auf meine eigene Fehlerseite (404.html). Diese Snippets können in allen Websitedefinitionen eingebunden werden.

Weiter unten geht’s mit den Webseiten weiter. Erst leiten ich alle Aufrufe von http(s)://www.pratt.de, http(s)://dominicpratt.de und http(s)://www.dominicpratt.de um auf meine eigentliche Webseite https://pratt.de. Mit Hilfe von {uri} redirecten wir auch die übergebenen Aufrufparameter, damit der Benutzer auf die gesuchte Unterseite weitergeleietet wird.

Zum Schluss, im Block für meine Webseite https://pratt.de definieren wir die gzip-/zstd-Kompression mit encode zstd gzip und lassen Caddy ganz simpel als „Fileserver“ dienen. Mit import static und import 404 binden wir die oben erstellten Snippets ein. Außerdem leite ich jeden Aufruf von /feed/ auf die index.xml um.