managarten/docker/nginx/landings.conf
Till JS 2eb70c62da mana-ev: vier Verein-Domains live, .ch kanonisch, andere als 301
Vier Cloudflare-Zonen für mana e.V. Schweizer Verein in Gründung:

- mana-ev.ch (apex)  → Astro-Landing (mana-landing :3088)
- www.mana-ev.ch     → 301 → mana-ev.ch
- mana-ev.{com,de,at} + jeweils www → 301 → mana-ev.ch

DNS via CF-API (32 Operationen): Default-A/AAAA-Records von
domainssaubillig auf Hetzner gelöscht (Apex, www, Wildcard pro Zone),
durch CNAME → 1435166a-...cfargotunnel.com ersetzt. Wildcard nicht
recreated — saubere Konfig, nur explizite Subdomains gehen.

Tunnel-Config (cloudflared-config.yml): 8 neue Hostnames mit
service-Rules. Nginx-Config (docker/nginx/landings.conf): ein
server-Block für 7 Redirect-Hostnames.

Aufgedeckte Pfad-Korruption: cloudflared-launchd-plist und
docker-compose-Volumes verweisen noch auf ~/projects/mana-monorepo/
statt managarten/. Mit Symlink (Tunnel) und Datei-Kopie (Nginx)
notdürftig geflickt — siehe OFFENE_PUNKTE.md für saubere Lösung.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 13:53:34 +02:00

179 lines
4.8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 612 Monaten kann das wieder raus.
# ============================================
server {
listen 80;
server_name cards.mana.how;
return 301 https://cardecky.mana.how$request_uri;
}
server {
listen 80;
server_name cards-api.mana.how;
return 301 https://cardecky-api.mana.how$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;
}
# cardecky.com — Cardecky Marketing-Landing (eigene .com-Domain).
# Die App selbst läuft als SvelteKit-Container auf cardecky.mana.how
# (siehe cloudflared-config.yml + docker-compose.macmini.yml `cards-web`).
server {
listen 80;
server_name cardecky.com;
root /srv/landings/cardecky;
index index.html;
include /etc/nginx/snippets/landing-common.conf;
}
# food.mana.how — Food Landing
server {
listen 80;
server_name food.mana.how;
root /srv/landings/food;
index index.html;
include /etc/nginx/snippets/landing-common.conf;
}
# citycorners.mana.how — CityCorners Landing
server {
listen 80;
server_name citycorners.mana.how;
root /srv/landings/citycorners;
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;
}
}