Spezielles ErrorDocument für bestimmte Inhalte

  • Hallo zusammen.

    Folgendes: Ich habe einen Server, der zu 99% für die Auslieferung von Bildern zuständig ist und nur 1% HTML-Inhalte sind. Nun würde ich gerne, wenn es denn ein Bild nicht mehr gibt ein anderes senden.

    Soweit so gut. Könnte man ja mit einer RewriteCond / RewriteRule machen, aber genau das will ich nicht. Ich möchte auf dem Server keine Rules laufen lassen, nur wegen nicht vorhandenen Bildern. Ist mir zu systemlastig bei mehr als 300.000 Bildern, die wirklich existieren und mehrfach täglich abgerufen werden.

    Daher meine Idee, das über das ErrorDocument zu machen, nur geht das?

    Kann man dort ein Bild hinterlegen und keine HTML-Datei?
    Könnte man den dort per default gesendeten 404 unterbinden?
    Und auch wichtig. Kann man das trennen? Also normales Error-Dokument für die Webseiten und ein anderes für JPG-Files?

    Bzw. welche andere Möglichkeit gibt es da? Rules möchte ich wie gesagt nicht, denn ich möchte nicht bei jedem Request erst einen extra Request absetzen müssen um zu sehen, ob das Bild vorhanden ist und dann darauf zugreifen. Also sollte schon eine Lösung sein die nur dann aktiv wird, wenn das Bild nicht existiert und dann eben ein anderes ausliefert.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Verwendest Du den Server als eine Art Bildspeicher, von dem Deine Websites auf anderen Servern aus zugreifen?
    Falls ja, dann könntest Du auf den anderen (abrufenden) Sites eine RewriteRule laufen lassen.

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Äm ja und nein - weiß nun nicht genau was Du meinst ;)

    Der Server ist der Bildspeicher, korrekt. Alle Domänen, Webseiten greifen auf die Bilder zurück, auch korrekt.

    Nur, wie soll ich da nun auf den anderen Servern darauf zugreifen? Die haben damit ja nichts zu tun. Die anderen Server liefern die Webseiten aus und die Bilder kommen direkt vom Bilderserver, ähnlich dem CDN von Flickr, nur eben ohne Proxy.

    Bildlich wäre das so:
    Domainserver n <-> Datenbankserver
    |
    v
    Auslieferung an Browser <- Bilder vom Bilderserver

    Technisch gesagt.

    https://beispiel.rocks/beispiel.rocks/www.domain.de -> A Record vom Domainserver
    img1.domain.de -> CNAME von img.domain.de
    img2.domain.de -> CNAME von img.domain.de
    img3.domain.de -> CNAME von img.domain.de
    img.domain.de -> A Record vom Bilderserver

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Hm, ok, eine Idee hätte ich noch, aber nur so angedacht. Würde PHP benötigen und das habe ich auf dem Server aktuell nicht (Performance-Optimierung).

    Theoretisch kann ich ja ErrorDocument verwenden und da eine PHP-Datei aufrufen. Darin dann prüfen, ob ein Bild angefordert wurde oder nicht. Wenn nicht, dann Fehlerseite senden, wenn schon, dann JPG-Header senden und Alternativgrafik hinterher.

    Zwar wäre der 404 dann noch immer da, aber nicht wirklich schlimm. Hauptsache es kommt ein Bild. Nur, PHP habe ich extra wegen der Performance deaktiviert und wollte es auf dem neuen Server erst gar nicht installieren ;)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Erste Idee:

    Wenn Server B nur Bilder liefert und (vernünftigerweise) kein PHP zur Verfügung hat, dann das ErrorDocument von Server A ausliefern lassen, dort per PHP testen, was gesucht wurde und dementsprechend Header setzen und auf ein Bild umleiten.

    Zweite Idee (ungetestet und bei der kein Header manipuliert werden kann): Mit dem Errordocument auf Server A bleiben und über eine leere sonst HTML Datei Javascript ausliefern. Krankerweise wird im IMG Src Javascript interpretiert. Darüber dann die Abfrage und dementsprechend verarbeiten.

  • So, beide Ansätze klingen interessant, hab es aber nicht versucht. Denn wie gesagt, Server A (Domainserver) hat mit den Bildern ja nichts zu tun. Der bekommt von einem Bild-Request ja nichts mit. Die Anfragen gehen per DNS direkt an den Bilderserver.

    War nun aber fast 2 Stunden am Telefon und habe eigentlich zuvor eine funktionierende Lösung gefunden. Wenn man die Doku mal genauer ließt, dann ist man da klar im Vorteil -> Synonym -> lesen!

    Man kann mehrere ErrorDocument 404 in der gleichen vhost festlegen. Ich habe es nun so gemacht:

    Code
    <Directory /bilder/kunden>
    ErrorDocument 404 /bilder/webseite/no_image.png
    </Directory>

    Fazit: Alle Bilder werden normal ausgeliefert. Ein nicht existentes sendet zwar Header 404, aber auch die Alternativgrafik. Reicht so vollkommen aus. 404 kann ruhig kommen, ist kein Problem. Hauptsache ein Bild kommt ;)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(