diff --git a/README.md b/README.md index d22633b..69baa20 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,16 @@ touch kasse.db docker run -p 9090:90 -v $(pwd)/kasse.db:/app/kasse.db -t erdbeerhannah:latest ``` +### Nginx Reverse-Proxy + +Bei 502 Bad Gateway hinter nginx: + +1. **Proxy-Header**: Nginx muss `X-Forwarded-For`, `X-Forwarded-Proto`, `Host` setzen (die App nutzt `ProxyFix`). +2. **Upstream-Erreichbarkeit**: `proxy_pass` muss den Container erreichen: + - nginx auf gleichem Host wie Docker: `http://127.0.0.1:9090` + - nginx auf anderem Host: `http://:9090` +3. **Beispielkonfiguration**: Siehe `nginx-proxy.example.conf` + ## Privatsphäre Die App *erdbeerhannah* protokolliert keine personenbezogenen Daten. Keine IP-Adressen und keine persönlichen Benutzer-Eingaben. Es werden keine Cookies genutzt. Zur reinen Nutzungsstatistik (Seitenaufrufe) verwenden wir das datenschutzfreundliche, Cookie-lose [Plausible Analytics](https://plausible.io/). Es gibt keine Werbung. diff --git a/app.py b/app.py index 1e60b29..8e97ec3 100644 --- a/app.py +++ b/app.py @@ -5,10 +5,12 @@ import logging import sqlite3 import uuid from werkzeug.security import generate_password_hash, check_password_hash +from werkzeug.middleware.proxy_fix import ProxyFix from flask import Flask, render_template, request, session, send_from_directory, g, redirect, url_for from flask_bootstrap import Bootstrap app = Flask(__name__) +app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1) app.config['SECRET_KEY'] = 'j69ol5mcHLsEtLg4Y/+myd9wWD4pp56E' # setup logging diff --git a/nginx-proxy.example.conf b/nginx-proxy.example.conf new file mode 100644 index 0000000..148e95b --- /dev/null +++ b/nginx-proxy.example.conf @@ -0,0 +1,28 @@ +# Beispiel nginx Reverse-Proxy Konfiguration für erdbeerhannah +# Pfad anpassen, z.B. /etc/nginx/sites-available/erdbeerhannah +# +# Upstream-URL je nach Deployment: +# - nginx auf gleichem Host wie Docker: http://127.0.0.1:9090 +# - nginx auf anderem Host: http://10.7.0.5:9090 (Docker-Host-IP) +# - Beide im gleichen docker-compose: http://erdbeerkasse:90 + +server { + listen 443 ssl http2; + server_name erdbeerhannah.elpatron.me; + + # SSL-Zertifikate + ssl_certificate /pfad/zu/cert.pem; + ssl_certificate_key /pfad/zu/key.pem; + + location / { + proxy_pass http://127.0.0.1:9090; + proxy_http_version 1.1; + 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; + proxy_read_timeout 60s; + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + } +}