managarten/docker/nginx/landings.conf
Till JS 08032c004b feat(manascore): add live uptime badges from status.mana.how
- generate-status-page.sh now also writes status.json alongside index.html
  Format: { updated, summary: {up, total}, services: { appName: bool } }
- nginx status.mana.how serves status.json with CORS headers (public read)
  and explicit location block to avoid rewrite to index.html
- ManaScore index page fetches status.json client-side on load and
  injects green ● LIVE / red ● DOWN badge next to each app's status chip

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 18:47:55 +02:00

142 lines
3.6 KiB
Text

# 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;
# 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;
}
# zitares.mana.how — Zitare Landing
server {
listen 80;
server_name zitares.mana.how;
root /srv/landings/zitare;
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;
}
# manadeck.mana.how — ManaDeck Landing
server {
listen 80;
server_name manadeck.mana.how;
root /srv/landings/manadeck;
index index.html;
include /etc/nginx/snippets/landing-common.conf;
}
# nutriphi.mana.how — NutriPhi Landing
server {
listen 80;
server_name nutriphi.mana.how;
root /srv/landings/nutriphi;
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;
}
}