From 73cb0c77778d864e9ba9b860b10a0655acd22059 Mon Sep 17 00:00:00 2001 From: elpatron Date: Sun, 22 Mar 2026 18:43:55 +0100 Subject: [PATCH] =?UTF-8?q?ProxyFix=20und=20nginx-Beispiel=20f=C3=BCr=20Re?= =?UTF-8?q?verse-Proxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Werkzeug ProxyFix für X-Forwarded-* Header - nginx-proxy.example.conf mit korrekten proxy_set_header - README: Hinweise zu 502-Beseitigung hinter nginx Made-with: Cursor --- README.md | 10 ++++++++++ app.py | 2 ++ nginx-proxy.example.conf | 28 ++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 nginx-proxy.example.conf 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; + } +}