tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Moodle, Varnish ja ERR_TOO_MANY_REDIRECTIONS

Moodle on hankala pala välimuisteille. Se on huomattavan dynaaminen, jonka takia Varnish ei oikein pääse cacheamaan mitään hyödyllistä. Lisäksi Moodlessa on omaa cache-tekniikkaa käytössä. Sen sijaan jokin tietokantaa ja PHP:tä hoitava, kuten Redis tai memcached saattaisivatkin olla hyödyllisempiä. Varnish kuitenkin puoltaa paikkansa reverse proxyna ja kuormaa tasapainottamassa.

Itse olen ottanut huomattavan yksinkertaisen lähestymistavan. Koska Varnish ei nopeuta yhtään mitään Moodlen kanssa, niin niitä ei kannata sen takia naittaa yhteen. Minulla sen sijaan on DigitalOceanilla samassa dropletissa muitakin sivustoja, pääosin WordPress-pohjaisia, niin Moodle joutuu sen takia olemaan niin Hitchin kuin Varnishin takana.

Varnish asettaa määrättyjä headereita Moodle-sivustolle, samalla kuin muillekin. Käytännössä sinänsä merkuítyksettömiä, kuten cache-control. Noita pystyisi varmaan säätämään Varnishissa per domain, mutta en ole nähnyt tarpeelliseksi selvittää asiaa.

Pari asiaa on kuitenkin tehtävä.

Estetään Moodlen kiertäminen cachen kautta. Joten avataandefault.vcl:

nano /etc/varnish/default.vcl

Lisää tiedostoon osion vcl_recv alkuun tämä:


# tipauttaa virtual hostin
if (req.url ~ "example.com") {
return (pass);
}

Jos olisi käytössä erilliset .vcl-tiedostot per virtual host, niin tuo laitettaisiin tietenkin sinne.

Jokaisella lienee SSL käytössä. Kun Hitch tai mikä tahansa muu ratkaisu terminoi SSL:n. niin kierto Varnishin kautta Apachelle (tai nginxille) aiheuttaa yhden ilkeän sivuvaikutuksen. Saa virheilmon:

ERR_TOO_MANY_REDIRECTS

Samalla kehoitetaan tyhjentämään selaimen välimuisti ja poistamaan cookiet. Jokainen tuon kanssa paininut tietää, että evästeiden poistaminen ei koskaan auta yhtään mitään ja ainoa seuraus on, että kirjautuu ulos kaikilta sivustoilta sekä välimuistien kadotessa sivujen lataaminen hidastuu hetkeksi.

Syy on serverillä. Joko ohjataan päättymätöntä rinkiä https ja http välillä, tai www ja ei-www välillä. Syyllisen tai syyllisten löytäminen on aika tuskaa.

Mutta on myös toinenkin syy. Sivustoa pyörittävälle ohjelmalle, oli se sitten WordPress tai Moodle, ei ole kerrottu, että SSL on aidosti mukana. Ei edes silloin kun asetetussa urlissa on https mukana. Minä en maallikkona kykene ymmärtämään miksi ei muka urlista tajuta, että https tarkoittaa SSL-liikennettä. Niin tai näin, niin WordPressissä on oma korjauksensa, ja Moodlessa fiksaus on aivan yhtä helppo.

Avataan config.php:

nano /var/www/html/config.php

Sopivaan paikkaan, esimerkiksi sen jälkeen kun url on kerrottu, lisätään tämä:

$CFG->sslproxy  = true;