diff --git a/Caddyfile b/Caddyfile index 31352ee..e2968d8 100644 --- a/Caddyfile +++ b/Caddyfile @@ -2,8 +2,26 @@ emacssurvey.tecosaur.net @dynamic { not path /css/* + not 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..ab028e6 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/* + not 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 🙂.