This commit is contained in:
42
main.go
42
main.go
@@ -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 521 <small>(Origin Server verweigert Verbindung)</small></span>
|
||||
<h1>Too Many Requests - HTTP-ERROR 429</h1>
|
||||
<span class="pill">ERROR 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. 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>
|
||||
|
||||
Reference in New Issue
Block a user