From 32c26161a231745b7689b2d21370bb81416894c8 Mon Sep 17 00:00:00 2001 From: TEC Date: Mon, 17 Oct 2022 00:58:19 +0800 Subject: [PATCH] Add Caddy HTTP error files --- Caddyfile | 22 ++++++++++++++++++++-- setup.org | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Caddyfile b/Caddyfile index 31352ee..9a44a8e 100644 --- a/Caddyfile +++ b/Caddyfile @@ -2,8 +2,26 @@ emacssurvey.tecosaur.net @dynamic { not path /css/* + path /favicon.ico + not path /robots.txt } reverse_proxy @dynamic localhost:8000 -root /css/* /opt/emacs-survey/public/css/ -file_server /css/style.css +root * /opt/emacs-survey/public +file_server + +handle_errors { + @404 expression `{err.status_code} == 404` + handle @404 { + rewrite * /caddy-error.html + templates + file_server + } + + handle { + rewrite * /{err.status_code} + reverse_proxy https://http.cat { + header_up Host {upstream_hostport} + } + } +} diff --git a/setup.org b/setup.org index 198eec3..4384c6b 100644 --- a/setup.org +++ b/setup.org @@ -72,22 +72,51 @@ SETUPDIR=$(dirname "$(readlink --canonicalize-existing "$0")") #+end_src ** Caddy Config +:PROPERTIES: +:header-args:prog: :tangle Caddyfile +:END: We just need to redirect to Genie for now, which makes for a rather simple config. The only complication is serving the static files through Caddy not Genie, for performance reasons (Genie recommends against serving static files with it). -#+begin_src prog :tangle Caddyfile +#+begin_src prog emacssurvey.tecosaur.net @dynamic { not path /css/* + path /favicon.ico + not path /robots.txt } reverse_proxy @dynamic localhost:8000 +#+end_src -root /css/* /opt/emacs-survey/public/css/ -file_server /css/style.css +We'll just pass all other requests to the public folder of the Emacs Survey. +#+begin_src prog +root * /opt/emacs-survey/public +file_server +#+end_src + +The only thing left is error pages, for which we'll use a combination of error +pages and http.cat 🐱. + +#+begin_src prog +handle_errors { + @404 expression `{err.status_code} == 404` + handle @404 { + rewrite * /caddy-error.html + templates + file_server + } + + handle { + rewrite * /{err.status_code} + reverse_proxy https://http.cat { + header_up Host {upstream_hostport} + } + } +} #+end_src Just this one file is all it takes to get Caddy set up to our liking 🙂.