# Nginx Configuration for Self-Hosted Landing Pages # Each server block serves a different landing page from its dist/ directory # All traffic comes through Cloudflare Tunnel → localhost:4400 # Shared settings gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/json image/svg+xml; # ============================================ # Cardecky-Migration: 301-Redirects (2026-05-08) # Alte cards.mana.how / cards-api.mana.how Bookmarks weiterleiten, # bis sich Nutzer/externe Clients an die neue Domain gewöhnt haben. # Nach 6–12 Monaten kann das wieder raus. # ============================================ server { listen 80; server_name cards.mana.how cardecky.mana.how; return 301 https://wordeck.com$request_uri; } server { listen 80; server_name cards-api.mana.how cardecky-api.mana.how; return 301 https://api.wordeck.com$request_uri; } # ============================================ # mana e.V. Verein-Landing — kanonische Domain mana-ev.ch # (Schweizer Verein in Gründung) # Alle anderen TLDs (.com/.de/.at) und alle www-Varianten # 301-Redirect auf https://mana-ev.ch. # Apex `mana-ev.ch` liegt direkt am Astro-Landing-Container :3088, # nicht hier. # ============================================ server { listen 80; server_name www.mana-ev.ch mana-ev.com www.mana-ev.com mana-ev.de www.mana-ev.de mana-ev.at www.mana-ev.at; return 301 https://mana-ev.ch$request_uri; } # Default server (catch-all → it.mana.how as homepage) server { listen 80 default_server; server_name _; root /srv/landings/it; index index.html; include /etc/nginx/snippets/landing-common.conf; } # it.mana.how — European Tech Independence server { listen 80; server_name it.mana.how; root /srv/landings/it; index index.html; include /etc/nginx/snippets/landing-common.conf; } # chats.mana.how — Chat Landing server { listen 80; server_name chats.mana.how; root /srv/landings/chat; index index.html; include /etc/nginx/snippets/landing-common.conf; } # pics.mana.how — Picture Landing server { listen 80; server_name pics.mana.how; root /srv/landings/picture; index index.html; include /etc/nginx/snippets/landing-common.conf; } # quotess.mana.how — Quotes Landing server { listen 80; server_name quotess.mana.how; root /srv/landings/quotes; index index.html; include /etc/nginx/snippets/landing-common.conf; } # presis.mana.how — Presi Landing server { listen 80; server_name presis.mana.how; root /srv/landings/presi; index index.html; include /etc/nginx/snippets/landing-common.conf; } # clocks.mana.how — Clock Landing server { listen 80; server_name clocks.mana.how; root /srv/landings/clock; index index.html; include /etc/nginx/snippets/landing-common.conf; } # docs.mana.how — Documentation server { listen 80; server_name docs.mana.how; root /srv/landings/docs; index index.html; include /etc/nginx/snippets/landing-common.conf; } # status.mana.how — Public Status Page (generated by mana-status-gen every 60s) server { listen 80; server_name status.mana.how; root /srv/landings/status; index index.html; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Cache-Control "no-store" always; # Allow ManaScore page to fetch status.json add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET" always; location / { try_files $uri /index.html; } # Serve status.json directly (do not rewrite to index.html) location = /status.json { add_header Content-Type "application/json" always; add_header Cache-Control "no-store" always; add_header Access-Control-Allow-Origin "*" always; try_files $uri =404; } location /health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } }