Squid liefert nach einer Weile einen 301

bitmuncher

Senior-Nerd
Ich ueberwache einen Squid mit Nagios. Dafuer setzt Nagios einen spezifischen Request auf den Squid ab, was eigentlich auch funktioniert. Problem ist nun, dass das Nagios nach einer Weile (1-2 Tage) ploetzlich vom Squid einen 301 erhaelt

Code:
HTTP CRITICAL - Invalid HTTP response received from host on port 51080: HTTP/1.0 301 Moved Permanently

Aendert man nun den User-Agent, der vom Nagios mitgesendet wird, kommt wieder problemlos ein 200er. Allerdings kann es natuerlich keine dauerhafte Loesung sein alle 1-2 Tage den User-Agent zu aendern. Hat evtl. jemand eine Idee, woran dieses Problem liegen und vor allem, wie man es umgehen kann? Bin langsam mit meinem Latein am Ende und kann mir das Verhalten nicht erklaeren. Das Problem scheint definitiv im Squid zu liegen, der als Web-Cache fungiert, und nicht an dahinter laufenden Webservern. Diese werden getrennt ueberwacht und liefern einen 200er, wenn Squid bereits einen 301 liefert. Ein komplettes Rausnehmen der User-Agent aus dem Request bringt auch keine Abhilfe. Auch dann bekommt das Nagios nach einer Weile einen 301.

PS: Dies ist ein Cross-Posting, da es unter http://www.unixboard.de/vb3/showthread.php?t=45919 bisher keine Antwort gab. Obwohl hier weniger Sysadmins im Board sind, gibt's hier ja evtl. die kreativeren Koepfe. ;) Jede Idee ist willkommen. :)
 
Ist zwar ein weiter Schuss ins Blaue, aber hast du eventuell etwas Firewall-Ähnliches laufen, was den Dauerping nach einiger Zeit ablehnt bzw. als Spam einstuft?

Was passiert, wenn du den User-Agent wechselst und dann zum alten zurückwechselst?

lG

Brabax
 
Eine WAF, ein IDS o.ä. hatte ich auch schon im Verdacht. Laut Aussage der Infrastruktur-Admins ist da aber nichts entsprechendes geschaltet. Wenn man zum alten Agent zurück wechselt, wird dieser wieder für ein paar Tage akzeptiert und bekommt irgendwann wieder ein 301.

Aktuell habe ich auch eine neue Vermutung... Die Seite, die da gecachet werden soll bzw. vom Nagios geprüft wird, ob sie über den Squid erreichbar ist, ändert sich relativ häufig. Bekommt der Squid mit, dass sich die Seite in einem bestimmten Zeitzyklus ständig ändert, wird sie nicht mehr aus dem Cache geliefert und auch nicht mehr in den Cache aufgenommen, sondern es wird nur auf die Seite weitergeleitet, was den 301 erklären könnte. Das ist allerdings nur eine Vermutung aus meinem logischen Verständnis von Squids Caching heraus. Kann das evtl. jemand bestätigen?
 
Bekommt der Squid mit, dass sich die Seite in einem bestimmten Zeitzyklus ständig ändert, wird sie nicht mehr aus dem Cache geliefert und auch nicht mehr in den Cache aufgenommen, sondern es wird nur auf die Seite weitergeleitet, was den 301 erklären könnte. Das ist allerdings nur eine Vermutung aus meinem logischen Verständnis von Squids Caching heraus. Kann das evtl. jemand bestätigen?

das lässt sich doch ganz leicht testen, indem du neben dieser einen Seite mal noch eine andere Seite, möglichst 'ne wirklich statische HTML-Seite, über den Squid abfragst und schaust, ob diese zeitgleich mit der anderen ebenfalls den 301 liefert oder weiterhin funktioniert?
 
So leicht ist das leider nicht. Der Webserver, für den wir cachen, gehört nicht zu unserer Firma und meines Wissens nach liegen dort keine statischen Inhalte rum. Wird alles irgendwie generiert und darauf habe ich keinen Einfluss. Aber ich werd mal schauen, wo ich ggf. mal ein Test-Szenario aufsetzen kann, auf dem ich dynamische und statische Inhalte zur Verfügung habe. Guter Hinweis! Danke. :)
 
So leicht ist das leider nicht. Der Webserver, für den wir cachen, gehört nicht zu unserer Firma und meines Wissens nach liegen dort keine statischen Inhalte rum.

auch keine statischen Grafiken, die du direkt laden könntest?
oder selbst wenn nicht: wenigstens ist doch (denke ich) die Wahrscheinlichkeit, dass sich eine Grafik, die hinter einer URL steckt, ändert, geringer?!
 
Hm, da müsste ich schon genauer wissen, worin die Unterschiede liegen könnten um gezielt beim zuständigen Unternehmen nachfragen zu können. Allgemein geht der Squid aber auf einen Loadbalancer, der zumindest Werte wie Sessions etc. "normalisieren" sollte.
 
@Bitmuncher

Ich kann deine Theorie bestaetigen.

Ich habe Adserver mit wecheselnden Content von freenet unter der gleichen URL. Ab und an mache ich Loganalysen und checke sporadisch URLs (mit den Microsites) per Telnet. Mein lokaler squid gibt mir die gleichen Meldungen (vermutlich auch nach Aenderungen des content in der microsite).

Aber ganz abgesehen davon wuerde ich entweder die Testseite nicht cachen, oder doch ne statische nehmen um den squid zu ueberwachen ;)

Oder lieber was eigenes basteln :)
 
Allgemein geht der Squid aber auf einen Loadbalancer, der zumindest Werte wie Sessions etc. "normalisieren" sollte.

Hmm das machen zwar einige Loadbalancer, aber hier gibt es wohl
keine Sessions. Gerade das hinter dem Loadbalancer verschiedene
Webserver warten wird das Problem sein. Aber was spricht dagegen
den User-Agent mit dem Check dieses Hosts jedes Mal mitzugeben?
Wenn Du die Apache Server nicht unter Deiner Kontrolle hast ist
das doch die einfachste Art das abzufangen.
 
Aber was spricht dagegen
den User-Agent mit dem Check dieses Hosts jedes Mal mitzugeben?
Wenn Du die Apache Server nicht unter Deiner Kontrolle hast ist
das doch die einfachste Art das abzufangen.

Ich müsste einen zufallsgenerierten User-Agent mitgeben, damit der Squid nicht immer wieder einen 301 liefert. Dazu müsste ich das Plugin entsprechend aufbohren und das will ich eigentlich vermeiden, da es eben auch noch zum Check anderer Systeme wie z.B. auch Apache-Servern verwendet wird. Die Pflege von 2 Plugins anstatt einem macht auch doppelt soviel Aufwand und sorgt für unnötige Verwirrungen in der Monitoring-Konfiguration, die bei uns aufgrund der Vielzahl von Servern, Projekten und Services quasi als "Referenz" für das Netzwerk genutzt wird.

Aktuell habe ich es erstmal durch einen Workaround gelöst. Laut Aussage der Betreiber der Webserver, für die der Squid cachet, liefern diese und deren Loadbalancer niemals einen 301 im Fehlerfall sondern einen 404, 500 usw.. Damit kann ich im Monitoring erstmal davon ausgehen, dass ein 301 als OK-Status gewertet werden kann. Ich akzeptiere also jetzt sowohl die 200 als auch die 301 als Returncode. Schön finde ich diese Lösung allerdings nicht, vor allem weil ich immernoch nicht weiss ob meine Vermutung richtig ist. Finde dazu nirgendwo eine Doku und um mich durch die Squid-Sources zu wühlen fehlt mir die Zeit.
 
Zurück
Oben