# The live block on cloud-2, kept here so the config is reviewable in the repo. # Copy of /etc/caddy/Caddyfile's demo section — if you change one, change both. # Both names serve the same build from the same root. The prerendered HTML # carries pointing at the primeintellectgrowth name, so # the second hostname does not split search ranking between two copies. demo.primeintellectgrowth.com, demo.lumbridgecorp.com { # REQUIRED, and its absence is silent. Without it Caddy builds a second # server on *:443 that has never heard of this hostname, and public traffic # — which NATs to 10.0.0.2 — falls through to an empty 200 behind a # perfectly valid certificate. A --resolve check from cloud-2 still passes, # so the only way to catch it is to curl the real hostname from elsewhere. bind 10.0.0.2 import secweb encode zstd gzip root * /var/www/demo.primeintellectgrowth.com # The whole point of this site is being found and read, so it says so # explicitly. primeintellectgrowth.com itself serves noindex. header X-Robots-Tag "index, follow" @assets path /assets/* header @assets Cache-Control "public, max-age=31536000, immutable" @docs not path /assets/* header @docs Cache-Control "no-cache" # No SPA fallback. Every route is prerendered to its own index.html, so a # fallback to the app shell would answer 200 for a typo'd URL and let a # crawler index unlimited copies of the homepage. try_files {path} {path}/index.html file_server handle_errors { rewrite * /404.html file_server } }