RedirectMatch: uvjetno preusmjeravanje web stranica na novi server

Davno su prošla vremena kada nam je bio dovoljan jedan server za sve potrebe: mail, web, ftp.  Danas nekih servisa više nema, zato ima novih, ali najvažniji je bio i ostao web. Web je danas službeno glasilo institucije pa se očekuje da je brz, pouzdan, dinamičan, moderan i atraktivan. Drugim riječima, potreban je poseban server za web servis.

Kako novaca za novi server obično nema, odlučili smo se za virtualni server (VPS), kojeg danas možemo jednostavno dobiti kao institucija u sustavu visokog školstva. No, princip je isti ako ste se odlučili za vlastiti hardver ili za vlastiti virtualni server.

Ono što je nama trebalo, odnosno što smo trebali napraviti je:
- instalirati CMS na novi server, ubaciti informacije sa starog weba
- prebaciti stari web na novi server (zbog eventualno korisnih starijih podataka i starih linkova)
- korisničke stranice (/~korisnik) moraju ostati na starom serveru
- LDAP/AAI web sučelje također mora ostati na starom serveru

Kada se uzme u obzir postojeće preusmjeravanje na zajedničku (unizg, uniri, unios...) domenu, jasno je da treba pripaziti na preusmjeravanja, DNS i konfiguraciju Apacheja. U našem slučaju, s obzirom na zahtjeve koji smo dobili, rješenje je bilo relativno jednostavno.

Za preumjeravanje i filtriranje odlučili smo koristiti jednostavniji mehanizam od Rewrite-a, dakle RedirectMatch. RedirectMatch je redirekcija HTTP zahtjeva, ali uz podršku za regularne izraze, što je taman dovoljno za naš slučaj.

Na VPS-u smo instalirali CMS i dodali novi sadržaj, a naziv web servera je isključivo "www.institucija.sveuciliste.hr".

Potom smo na novi server instalirali i stari CMS (uz dump i import mysql baze), a u tome nam je pomogla činjenica da je stari web bio u poddirektoriju, pa nismo imali problema kod njegovog pozivanja (stari web je bez problema moguće dobiti sa http://www.institucija.sveuciliste.hr/subdir).

Nadalje, morali smo se pobrinuti da se ne preusmjeravaju korisničke stranice kada se pokušava webu pristupiti sa znakom "~".

Da bi to postigli, u osnovnom VHOST-u na starom serveru, gdje smo i prije ove promjene radili redirekciju na sveučilišnu domenu, i dalje ćemo raditi redirekciju, ali samo ako su udovoljeni određeni uvjeti:

<VirtualHost A.B.C.D:80>
        ServerName www.institucija.hr
        RedirectMatch /~(.*)$ http://imeservera.institucija.hr/~$1
     RedirectMatch /ldap(.*)$ http://imeservera.institucija.hr/ldap$1
        RedirectMatch /(.*)$ http://www.institucija.sveuciliste.hr/
</VirtualHost>

RedirectMatch preusmjerava na drugi server čim su udovoljeni uvjeti, zato sve izuzetke treba staviti prije finalnog preusmjeravanja na sveučilišnu domenu i novi server. Vidimo iz priloženog da smo radili izuzetke za korisničke stranice i AAI@EduHr sučelje (/ldap). Na isti način možete dodati i bilo koje druge poddirektorije.

Server na koji se preusmjeravaju izuzeci je zapravo isti taj stari server, samo pod drugim imenom. Ne možemo koristiti naziv "www" (jer se on preusmjerava na novi server), nego koristimo osnovni naziv servera (u primjeru je to "imeservera.institucija.hr").  Naravno, možete staviti i neki alias (www2, web i slično).

Prije nego restartamo apache kako bi nove redirekcije proradile, moramo se pobrinuti za DNS. Ovo je vrlo važno: dan prije svih promjena smanjite $TTL vrijednost na 10 minuta ili manje.  Mnogima tu stoji vrijednost 86400 (u sekundama, to je 1 dan), što znači da cijeli jedan dan neki korisnici neće moći doći do vaših stranica.  Ovo je zato što svaki DNS klijent pamti stare podatke, što traje sve do vremena koje piše u $TTL-u.  Evo što treba napraviti ($TTL se obično nalazi na početku datoteke):

$TTL 86400

treba promijeniti u

$TTL 5m

Povećajte Serial (u standardnom obliku datuma) i obavezno restartajte named.

Ukoliko je DNS na računalu sveučilišta, zamolite kolegu sistemca da umjesto vas najprije promijeni vrijednost $TTL-a, zatim dan kasnije upiše adresu za novi server. Ukoliko je zona delegirana vama, onda to možete napraviti sami. Ne zaboravite povećati Serial i vratiti vrijednost $TTL-a na staro.

Kod nas je to izgledalo ovako, u datoteci gdje je definirana naša zona smo samo promijenili:

;www             IN      CNAME   www.institucija.hr.
www             IN      A       IP.IP.IP.IP

Samo smo zakomentirali alias koji je vodio na naš server, i dodali IP adresu novog servera.

Ovime je naš problem riješen, ali situacija kod vas može biti puno složenija. Uglavnom su problemi kod korisnika s raznim starim adresama iz Bookmarka/Favoritesa, ili korisnici kucaju adrese koje su našli na vizitkama i slično. U tom slučaju ćete možda morati posegnuti za Rewrite pravilima, ali o "tom-potom".

Zdravko Rašic

Kuharice: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (2 votes)