Bugi Redirection-lisäosassa

WP-Palvelussa hyödynnetään tehokkaasti välimuistia monella tasolla. Käyttäjien oman selaimen välimuistin ja mahdollisen välityspalvelimen lisäksi myös edustapalvelimilla sekä WordPressissä itsessään on käytössä välimuisteja. Joissakin tapauksessa myös teemaan tai lisäosiin on lisätty omia välimuistitekniikoita.

Muutamat asiakkaamme törmäsivät hiljattain ongelmaan, jossa sivuston toiminta häiriintyi satunnaisesti siten, että sivu latasi itseään yhä uudelleen ja uudelleen. Nykyaikaiset selaimet huomaavat tällaisen virheen helposti, ja ne näyttävät käyttäjälle ilmoituksen ”Sivusto ei uudelleenohjaudu asianmukaisesti. Palvelin tässä osoitteessa uudelleenohjaa pyyntöjä loputtomasti.” tms. Tällaiset tilanteet näkyvät meillä myös valvonnassamme, ja saamme tällaisista tapauksista hälytyksen lähes välittömästi ongelman alkaessa.

Ongelman tutkiminen

Alussa ongelman oletettiin johtuvan WordPressin välimuistista, koska ongelma saattoi poistua yhtä nopeasti kuin alkoikin – lisäksi välimuistin tyhjennys korjasi tilanteen aina väliaikaisesti. Kun ongelma kuitenkin alkoi toistumaan yhä tiheämmin ja aina eri sivustoissa, ryhdyttiin asiaa tutkimaan tarkemmin. Sivustojen sekä edustapalvelimien lokeja käytiin lävitse ja suljettiin pois eri vaihtohtoja. Ongelma oli myös toistettavissa curl-työkalun avulla, jonka avulla saatiin täsmälliset tiedot palvelimen palauttamista vastauksista. Kun curl:ia käytettiin esimerkiksi näin: curl -IL -H Pragma:no-cache wp-palvelu.fi, sivusto latautui aina oikein. Tämän tiedon valossa saatiin todenettua, että vika todella oli välimuistissa.

Seuraavaksi käytiin lävitse ongelmallisten sivustojen yhteisiä piirteitä: oliko WordPress päivittynyt oikein, mitä teemoja ja lisäosia oli käytössä, ja olivatko ne päivittyneet oikein. Huomattiin, että kaikissa ongelmasivustoissa yhteinen piirre oli käytössä oleva Redirection-lisäosa (https://redirection.me/), joka on suosittu lisäosa uudelleenohjausten tekemiseen WordPressista käsin. Koska lisäosa on avointa lähdekoodia, kävimme lävitse viimeaikaisia muutoksia, ja huomasimme, että lisäosaan oli luotu oma välimuistitekniikka lisäosan toiminnan nopeuttamiseksi. Ominaisuus oli aktivoitu automaattisesti ja oletusasetuksena oli säilyttää tiedot välimuistissa tunnin ajan. Testasimme ominaisuuden poistoa niissä sivustoissa, joissa ongelma esiintyi, ja tämä osoittautui toimivaksi ratkaisuksi.

Apua WP-CLI:stä

Kaikilla asiakkaillamme on käytössä WP CLI -työkalu (https://seravo.com/docs/management/use-wordpress-with-wpcli/). Sen avulla muutos saatiin ajettua kaikille asiakkaillemme, joilla lisäosa on käytössä. Tämä saatiin tehtyä käyttämällä lisäosan omia funktioita wp eval -käskyllä näin:
wp eval '$options = red_get_options();$options["redirect_cache"] = -1;red_set_options($options);'
Kyseisillä funktiokutsuilla luetaan ensin muistiin nykyiset asetukset, asetetaan välimuisti pois päältä ja kirjoitetaan muutokset lisäosan omaa tallennustoimintoa käyttäen.