/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
43 lines
1.6 KiB
Plaintext
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;
|
|
}
|
|
}
|