tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

503 Backend Fetch Error, probe laittaa sairaaksi

Sisällys

Taistelin juuri äsken eksis.onein Varnishin kanssa. Tein juttuja ja yhtä äkkiä huomasin, että nyt tulee sisältöä cachesta – grace-aika on oikeasti hieno keksintö, koska kävijöille saitti ei ole nurin. Ainakaan gracen aikana. Tsekkasin backendin ja merkinnällä sick se oli. Probe oli saanut läpi 0/4 (minulla on onnistuttava kolme yritystä neljästä). Kun kommentoin proben pois default.vcl tiedostosta, niin backend oli restartin jälkeen healthy. Probe takaisin, restart ja backend oli taas sick, tällä kertaa määrällä 2/4.

Tuo antaa selvän viitteen siitä, että varsinaista ongelmaa merkityksessä apache-on-rikki-rikki ei ole.

Varnishin probe hyväksyy yhteyden terveeksi, kun se saa vastauksen 200 OK. Jos tulee mitä tahansa muuta, niin backend merkitään sairaaksi. Headerit saa tarkistettua komennolla

varnishlog -g raw -i Backend_health

Minä sain vastaukseksi

0 Backend_health - boot.default Still sick 4--X-R- 0 3 4 0.045329 0.000000 HTTP/1.1 301 Moved Permanently

Villi veikkaus on, että nyt riidellään

  • SSL:n ohjauksen kanssa http:stä https:ään
  • tai eksis.one ohjauksesta www.eksis.one kanssa
  • tai jonkin ihan muun ongelman kanssa

Minulla on käytännössä täysin identtinen asennus katiska.infossa kuin täälläkin, mutta Katiska toimii. Ainoa ero on DNS-tietueissa. Katiskan www on laitettu A-tietueella, eksis.oneissa CNAME-tietueella. En minä tiedä onko tuolla mitään merkitystä.

Kun googlettelin aikani, niin löysin väitteen, että ongelma johtuisi siitä, että Varnish huutelee host: 127.0.0.1 ja saa vastaukseksi host: example.com ja sen jälkeen sitten aletaankin patistaa serveriä uudelleenohjauksiin. Tuon saisi korjattua muokkaamalla default.vcl tiedostoa:

.probe = {
    .request = "GET / HTTP/1.1"
        "Host: example.com"
        "Connection: close"
        "Accept: text/html" ;
    .timeout = 1s;
    .interval = 10s;
    .window = 10;
    .threshold = 8;
}

Toinen vaihtoehto on käyttää HEAD pyyntöä:


.request =
"HEAD / HTTP/1.1"
"Host: example.com"
"Connection: close"
"User-Agent: Varnish Health Probe";

Intervallit sun muut thresholdit tietysti oman maun kukaan.

Koitin tuota, eikä auttanut. Huomasin myös, että threshold jäi aina yhden vajaaksi laittamastani. Jos minulla oli 4, niin kolme oli antanut oikein 200 OK ja sitten mentiin mäkeen. Kahdeksalla seitsemän onnistui, ja sitten paukahti 301 redirectiä. Alkaa pää särkemään, ja työaikaa on taas palanut muutaman tunnin.

Muistini mukaan aikoinaan Katiskassa .probe antoi error 503, jonka jälkeen kommentoin sen joksikin aikaa. Kun tein seuraavan kerran isompia muutoksia, niin sallin sen ja kaikki toimi hyvin. Koska mikään netistä löytämäni vinkkiviitonen ei auta, niin tehdään sama juttu: risuaitaa proben ja sen määrittelyjen eteen. Saitti toimii ja se riittää nyt.

Muokkaan myöhemmin, jos löydän jonkun ratkaisun.

Heti sairas

Jos GET tai HEAD käyttö aiheuttaa heti backendin muuttumisen tilaan sick, niin vaihtoehtoja on muutama.

Varmista, että sinulla on ylipäätään asennettuna paketti libwww-perl antamalla vaikka GET example.com komentorivillä (huomaa, että GET, HEAD jne. on kirjoitettava isolla). Jos Ubuntu ei tunnista sitä, niin tällä saat asennettua:

apt install libwww-perl -y

Voit käyttää hostin tilalla myös IP-osoitetta, sillä jos host ei ole asetettuna Apache2:een, niin pyyntö ei mene läpi.

IP-osoitteen (tai hostin tai urlin) on vastattava ilmoituksella 200 OK. Mikä tahansa muu vastaus aiheuttaa backendin muuttumisen tilaan sick. Ja tässä on myös kupletin koukku, jos sinulla on useampi domain tai jopa www-hakemistona jokin muu kuin /var/www/html. Jos annat pelkän IP-osoitteen ja sinulla on useampi, niin ensimmäinen vastaus ei ole 200 OK vaan se on 303 See other jolloin Apache käy katsomassa minkä virtual hostin se tarjoaisi, ottaa aakkosten ensimmäisen, ohjaa siihen ja antaa vasta sitten 200-ilmoituksen – mutta Varnishin probe on siinä vaiheessa jo poistunut paikalta.

Joten kokeile mitä saat komennolla

HEAD -S -d <ip-osoite>

vastaukseksi. Jos ensimmäinen ei ole 200 OK, niin et voi käyttää hostina ip-osoitetta, vaan joudut laittamaan virtual hostin.

Jostain syystä, jota en pysty selittämään, sama tapahtuu, jos laitan pelkän hostin muodossa example.com. Probe merkitsee heti tilan muotoon sick. Jos taasen laitan hostin www.example.com, niin probe on tyytyväinen. Kuitenkin kummallakin saan aina tilaksi 200 Ok kyselin sitä sitten GET, HEAD tai curl käyttäen. Liittynee varmaan jotenkin siihen, että example.com uudelleenohjataan muotoon www.example.com.