Files
MABEA/deploy/nginx_mabea.conf.template
T
patrickandClaude Sonnet 5 3ecca4cd09
CI / backend-tests (push) Successful in 55s
CI / frontend-build (push) Successful in 7m16s
deploy: nginx liefert React-PWA-Build statt Backend-Proxy auf /
/api/ geht weiter an Uvicorn, / serviert frontend/dist mit try_files-Fallback
auf index.html (react-router-dom routet im Client).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
2026-09-04 00:24:58 +02:00

43 lines
1.6 KiB
Plaintext

# limit_req_zone gehört in den http-Kontext (hier: via sites-enabled-Include-Kette
# bereits innerhalb von http{}, aber außerhalb des server{}-Blocks nötig).
# Grober Schutz gegen Brute-Force auf Login, ergänzt (nicht ersetzt) die
# Rate-Begrenzung/Lockout auf Anwendungsebene, die noch aussteht (Review-Fund).
limit_req_zone $binary_remote_addr zone=mabea_login:10m rate=5r/m;
server {
listen 80;
server_name __APP_DOMAIN__;
# Basis-Hardening-Header (Review-Fund owasp-top10-expert). Sobald TLS aktiv ist,
# zusätzlich Strict-Transport-Security ergänzen.
add_header X-Content-Type-Options nosniff always;
add_header X-Frame-Options DENY always;
add_header Referrer-Policy strict-origin-when-cross-origin always;
location /api/v1/auth/login {
limit_req zone=mabea_login burst=5 nodelay;
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /api/ {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# React-PWA (Sprint 7): statische Build-Ausgabe von frontend/dist.
# try_files statt 404 bei Client-Routen, da react-router-dom im Browser routet.
root /var/www/mabea;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}