summaryrefslogtreecommitdiff
path: root/nginx
diff options
context:
space:
mode:
authorArseney300 <Arseney300@gmail.com>2026-03-02 07:29:53 +0700
committerArseney300 <Arseney300@gmail.com>2026-03-02 07:29:53 +0700
commit8b02ebd751cfcafc8735488743bc90035c947d6c (patch)
tree7856355cbdfeb0d694d6fce4c4c8152108be5d3f /nginx
parentc6d20a5e4d22d1898896d7e157e52cef46e9b29b (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>
Diffstat (limited to 'nginx')
-rw-r--r--nginx/docker-compose.yaml7
-rw-r--r--nginx/error-pages/unknown-host.html82
-rw-r--r--nginx/nginx.conf47
-rw-r--r--nginx/run_certbot.sh1
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