changed
All checks were successful
release-tag / release-image (push) Successful in 1m46s

This commit is contained in:
2025-11-08 22:54:28 +01:00
parent 840ecf2953
commit eff3dd61af

42
main.go
View File

@@ -658,7 +658,7 @@ func errorhtml(w http.ResponseWriter, r *http.Request) {
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Webserver ist nicht erreichbar - Fehler 521</title>
<title>Too Many Requests - Error 429</title>
<style>
:root{
--bg:#f6f7f9;--text:#1f2937;--muted:#6b7280;--card:#ffffff;
@@ -701,18 +701,16 @@ func errorhtml(w http.ResponseWriter, r *http.Request) {
<body>
<div class="wrap">
<header>
<h1>Webserver ist nicht erreichbar</h1>
<span class="pill">Fehlercode&nbsp;521 <small>(Origin Server verweigert Verbindung)</small></span>
<h1>Too Many Requests - HTTP-ERROR 429</h1>
<span class="pill">ERROR&nbsp;429 <small>(Origin Server denied connection)</small></span>
</header>
<p class="lead">
Dein Browser funktioniert, der Edge-Proxy ist erreichbar - aber der Origin-Server antwortet nicht oder die Verbindung wird verweigert.
Your browser is working, the Edge proxy is reachable - but the Origin server is not responding or the connection is being refused.
</p>
<section class="grid" aria-label="Diagnose-Kette">
<!-- You / Browser -->
<section class="grid" aria-label="Diagnostic chain">
<article class="node" aria-label="Browser Status">
<div class="icon" aria-hidden="true">
<!-- Browser icon -->
<svg width="88" height="62" viewBox="0 0 88 62" xmlns="http://www.w3.org/2000/svg" role="img">
<rect x="1" y="6" width="86" height="55" rx="8" fill="#fff" stroke="#d1d5db"/>
<rect x="1" y="1" width="86" height="14" rx="8" fill="#f3f4f6" stroke="#d1d5db"/>
@@ -720,70 +718,66 @@ func errorhtml(w http.ResponseWriter, r *http.Request) {
<circle cx="18" cy="8" r="2.5" fill="#f59e0b"/>
<circle cx="26" cy="8" r="2.5" fill="#22c55e"/>
</svg>
<div class="status ok" title="Funktioniert">✓</div>
<div class="status ok" title="Functional">✓</div>
</div>
<h3>Du</h3>
<p class="sub">Browser</p>
<p class="state ok">Funktioniert</p>
<p class="state ok">Functional</p>
</article>
<!-- Edge / Proxy -->
<article class="node" aria-label="Edge/Proxy Status">
<div class="icon" aria-hidden="true">
<!-- Cloud icon -->
<svg width="96" height="64" viewBox="0 0 96 64" xmlns="http://www.w3.org/2000/svg" role="img">
<path d="M33 44h32a14 14 0 0 0 0-28 18 18 0 0 0-34-5 16 16 0 0 0-4 31z" fill="#e5e7eb" stroke="#d1d5db"/>
</svg>
<div class="status ok" title="Funktioniert">✓</div>
<div class="status ok" title="Functional">✓</div>
</div>
<h3>Edge-Proxy</h3>
<p class="sub">Zwischenschicht</p>
<p class="state ok">Funktioniert</p>
<p class="state ok">Functional</p>
</article>
<!-- Host / Origin -->
<article class="node" aria-label="Origin/Host Status">
<div class="icon" aria-hidden="true">
<!-- Server icon -->
<svg width="88" height="62" viewBox="0 0 88 62" xmlns="http://www.w3.org/2000/svg" role="img">
<rect x="6" y="10" width="76" height="18" rx="4" fill="#f3f4f6" stroke="#d1d5db"/>
<circle cx="16" cy="19" r="3" fill="#9ca3af"/>
<rect x="6" y="34" width="76" height="18" rx="4" fill="#f3f4f6" stroke="#d1d5db"/>
<circle cx="16" cy="43" r="3" fill="#9ca3af"/>
</svg>
<div class="status err" title="Fehler">✕</div>
<div class="status err" title="Error">✕</div>
</div>
<h3>Host</h3>
<p class="sub">Origin-Server</p>
<p class="state err">Fehler</p>
<p class="state err">Error</p>
</article>
</section>
<div class="actions">
<button class="btn primary" onclick="location.reload()">Erneut versuchen</button>
<button class="btn" onclick="document.getElementById('details').toggleAttribute('open')">Details anzeigen</button>
<button class="btn primary" onclick="location.reload()">Try again</button>
<button class="btn" onclick="document.getElementById('details').toggleAttribute('open')">Show details</button>
</div>
<details id="details" class="meta">
<summary><strong>Technische Details</strong></summary>
<summary><strong>Technical details</strong></summary>
<ul>
<li>Fehler: <strong>521</strong> - Origin verweigert die Verbindung (z.&nbsp;B. Firewall, blockierter Port, kein Dienst am Ziel).</li>
<li>Zeit: <span id="now">-</span></li>
<li>Error: <strong>429</strong> - The client (e.g., a browser, bot, script, or API integration) sends more requests in a short period of time than the server or its protection layer (proxy, WAF, rate limiter) allows. To protect itself, the server temporarily rejects further requests.</li>
<li>Time: <span id="now">-</span></li>
</ul>
<p>Tipps: Prüfe, ob dein Backend erreichbar ist (TCP/443 oder 80), ob der Dienst läuft und ob eine Firewall/Fail2ban/Rate-Limit die Proxy-IP blockiert.</p>
<p>Tips: You have sent too many requests in a short period of time. Please wait a moment and try again.</p>
</details>
<footer>
<span>Wenn das Problem fortbesteht, kontaktiere den Betreiber der Website.</span>
<span>If the problem persists, contact the website operator.</span>
</footer>
</div>
<script>
// Kleine Komfortfunktionen für die Detailbox
(function(){
const now = new Date()
document.getElementById('now').textContent = now.toLocaleString()
// Client IP lässt sich hier ohne Backend nicht sauber ermitteln - Platzhalter
})()
</script>
</body>