2016-07-26 22 views
0

Wenn Sie eine Wartungs-Site in Ihrem Varnish benötigen, ist die Standardmethode, sie über sub vcl_error() zu bedienen, indem Sie error 503 aufrufen.Varnish vcl_error sollte statische Dateien für die Wartung ausschließen

Das Problem hier ist, wenn Sie js/css/images in Ihrer Wartungs-Site benötigen und sie unter der gleichen URL gehostet werden, da alle diese Dateien auch in einem 503 landen.

Gibt es eine Möglichkeit, bestimmte Dateien oder Dateien durch Dateiendung auszuschließen? Ich habe verschiedene Wege versucht, z. Setzen Sie eine if() Anweisung um den Fehler 503 und geben Sie sie einfach ein, wenn die Dateierweiterung nicht png, jpg, js, css ist. Aber es führt zu einer Zeitüberschreitung.

Die meiste Zeit habe ich gelesen, dass Dateien auf z. Cloudflare oder verwenden Sie Base64-Codierung für Bilder und Inline-CSS/JS bei Bedarf.

Sind dies die einzigen Möglichkeiten?

Antwort

0

Sie haben Recht, Base64 codierte Bilder und Inline-CSS, JS, etc ... ist die sicherste Wette.

  • ganze Antwort ist einatomaren Nutzlast
  • brauchen Sie nicht Ihre vcl mit einer solchen Ecke Fällen Krempel
  • keine Möglichkeit, direkt Vermögen von Crawlern besucht zu
  • keine Gefahr der Ausbreitung von Cache-Wartungsanlagen zu Seiten außer Kontrolle (Forward Proxies)

und weiter und weiter.

BTW, Sie müssen nicht html-Datei in vcl setzen, könnten Sie diese Anweisung verwenden:

synthetic std.fileread("/etc/varnish/error.html"); 

und alles, was Sie ist Single Inline HTML vom Design-Abteilung benötigen.

+0

Das Problem hier ist, dass inline alle Dateien einschließlich Bilder als Base64 codiert Maintenance.html von ca. 1KiB bis fast 1,5MiB in einer einzigen Datei blasen. Aber danke für die Antwort, ich werde Ihnen die Antwortabstimmung geben. Vielen Dank! – Michael

+0

Danke :) Nun, Sie müssen dann Ihre Wartungsseite überprüfen. Ich denke, irgendetwas über 100kB ist zu groß für diesen Zweck. Denken Sie an all jene mobilen Benutzer mit schlechterer Verbindung. Und Sekunden zu warten, nur um festzustellen, dass die Site down ist, wird sie wirklich aufregen, fürchte ich. –

+0

Oh mein Kunde (und seine Kunden auch) sind sehr süchtig nach Stil der Website. Selbst die Wartungsseite ist eine gestylte Seite mit einem wirklich coolen Hintergrundbild;) Und da man Dinge für den Crossbrowser definieren muss, muss man vorfixiertes CSS mit Hintergrundbilddaten/src im base64-kodierten Format verwenden. Es ist also ziemlich einfach, bald ein Megabyte zu erreichen. – Michael

0

Ok, ich habe einen Workaround gefunden, der jetzt für mich funktioniert.

Im HTML-Code, der die Wartungs-Site darstellt, habe ich URLs einschließlich des Back-End-Ports verwendet. Die Anfragen treffen also nicht den Varnish selbst, sondern den Apache-Server.