diff options
| author | Arseney300 <Arseney300@gmail.com> | 2026-03-02 07:29:53 +0700 |
|---|---|---|
| committer | Arseney300 <Arseney300@gmail.com> | 2026-03-02 07:29:53 +0700 |
| commit | 8b02ebd751cfcafc8735488743bc90035c947d6c (patch) | |
| tree | 7856355cbdfeb0d694d6fce4c4c8152108be5d3f | |
| parent | c6d20a5e4d22d1898896d7e157e52cef46e9b29b (diff) | |
Add ghost.swave.lol alias and catch-all for unknown subdomains
Add ghost.swave.lol as Ghost alias in nginx and certbot. Add default
server blocks that serve a styled 404 error page for any subdomain
not configured on the server.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| -rw-r--r-- | nginx/docker-compose.yaml | 7 | ||||
| -rw-r--r-- | nginx/error-pages/unknown-host.html | 82 | ||||
| -rw-r--r-- | nginx/nginx.conf | 47 | ||||
| -rw-r--r-- | nginx/run_certbot.sh | 1 |
4 files changed, 134 insertions, 3 deletions
diff --git a/nginx/docker-compose.yaml b/nginx/docker-compose.yaml index 421c3c0..5066f79 100644 --- a/nginx/docker-compose.yaml +++ b/nginx/docker-compose.yaml @@ -8,16 +8,20 @@ services: #- 8000:8000 - 443:443 restart: always + extra_hosts: + - "host.docker.internal:host-gateway" volumes: - /var/nginx/conf/:/etc/nginx/conf.d:ro - /var/letsencrypt/etc:/var/letsencrypt/etc:ro #letsencrypt SSL certs - /var/letsencrypt/lts_site:/var/letsencrypt/lts_site:ro #letsencrypt plug site - /var/dh_param/dhparam-2048.pem:/etc/ssl/certs/dhparam-2048.pem #dhparam cert + - ./error-pages:/usr/share/nginx/error-pages:ro networks: git-network: ipv4_address: 172.22.0.254 ghost_network: jenkins_network: + monitoring_network: networks: #write each stack network (or connect it manually later) @@ -30,4 +34,7 @@ networks: jenkins_network: name: jenkins_network external: true + monitoring_network: + name: monitoring_network + external: true diff --git a/nginx/error-pages/unknown-host.html b/nginx/error-pages/unknown-host.html new file mode 100644 index 0000000..ab0fa1b --- /dev/null +++ b/nginx/error-pages/unknown-host.html @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Not Found — swave.lol</title> + <style> + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + background: #0a0a0a; + color: #e0e0e0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; + } + + .container { + text-align: center; + padding: 2rem; + } + + .code { + font-size: 8rem; + font-weight: 700; + letter-spacing: -0.05em; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 1; + margin-bottom: 1rem; + } + + .message { + font-size: 1.5rem; + color: #888; + margin-bottom: 2rem; + } + + .detail { + font-size: 0.95rem; + color: #555; + max-width: 400px; + margin: 0 auto 2.5rem; + line-height: 1.6; + } + + .home-link { + display: inline-block; + padding: 0.75rem 2rem; + border: 1px solid #333; + border-radius: 6px; + color: #aaa; + text-decoration: none; + font-size: 0.9rem; + transition: all 0.2s ease; + } + + .home-link:hover { + border-color: #667eea; + color: #667eea; + } + </style> +</head> +<body> + <div class="container"> + <div class="code">404</div> + <div class="message">This page doesn't exist</div> + <div class="detail"> + The subdomain you requested is not configured on this server. + </div> + <a href="https://swave.lol" class="home-link">Go to swave.lol</a> + </div> +</body> +</html> diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 8112e28..063ff2a 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -1,10 +1,51 @@ error_log /var/log/nginx/error.log warn; +# Default catch-all for unknown subdomains (HTTP) +server { + listen 80 default_server; + listen [::]:80 default_server; + + server_name _; + + root /usr/share/nginx/error-pages; + error_page 404 /unknown-host.html; + + location / { + return 404; + } + + location = /unknown-host.html { + internal; + } +} + +# Default catch-all for unknown subdomains (HTTPS) +server { + listen 443 ssl http2 default_server; + listen [::]:443 ssl http2 default_server; + + server_name _; + + ssl_certificate /var/letsencrypt/etc/live/swave.lol/fullchain.pem; + ssl_certificate_key /var/letsencrypt/etc/live/swave.lol/privkey.pem; + + root /usr/share/nginx/error-pages; + error_page 404 /unknown-host.html; + + location / { + return 404; + } + + location = /unknown-host.html { + internal; + } +} + server { listen 80; listen [::]:80; - server_name swave.lol blog.swave.lol jenkins.swave.lol cgit.swave.lol gerrit.swave.lol; + server_name swave.lol blog.swave.lol ghost.swave.lol jenkins.swave.lol cgit.swave.lol gerrit.swave.lol; location / { rewrite ^ https://$host$request_uri? permanent; @@ -17,12 +58,12 @@ server { } } -# Ghost — swave.lol and blog.swave.lol +# Ghost — swave.lol, blog.swave.lol, ghost.swave.lol server { listen 443 ssl http2; listen [::]:443 ssl http2; - server_name swave.lol blog.swave.lol; + server_name swave.lol blog.swave.lol ghost.swave.lol; server_tokens off; diff --git a/nginx/run_certbot.sh b/nginx/run_certbot.sh index 79cc681..d3fbb02 100644 --- a/nginx/run_certbot.sh +++ b/nginx/run_certbot.sh @@ -20,6 +20,7 @@ docker run -it --rm \ --webroot-path=/data/letsencrypt \ -d $domain \ -d blog.$domain \ + -d ghost.$domain \ -d jenkins.$domain \ -d cgit.$domain \ -d gerrit.$domain |
