Apache, SSI ja esiprosessointi
Luentotaltiointi
- forward.wmv 1.5M
- password.wmv 689K
- multiview.wmv 3.9M
- ssi.wmv 4.2M
Opiskellaan Apachen ominaisuuksia tekemällä edelleenohjaus, salasanasuojaus, monikielinen etusivu ja tutustutaan SSI:hin.
Kaikki tässä demossa käsiteltävät asiat toimivat vain Apache-www-palvelimissa eli www.cc.jyu.fi- tai people.cc.jyu.fi-koneissa. www.ad.jyu.fi on Microsoft IIS -www-palvelin, jossa asiat tehdään eri tavalla.
Muuta sivuston sisältävän hakemiston nimeksi nanonano. Jos et vielä ole kopioinut koko Nanonanon sivustoa V:-asemalta atk-keskuksen www-palvelimelle (www.cc.jyu.fi) niin tee se nyt.
Jos siirrät demojen aikana .-alkuisia tiedostoja SFTP-ohjelmalla niin oletuksena näitä tiedostoja ei näytetä tiedostolistauksessa. Valitse View|Show Hidden Files niin saat myös nämä piilotiedostot näkyviin.
Edelleenohjaus
Monesti käy niin että dokumentit muuttavat paikkaansa ja saattaa olla hyvin vaivalloista muuttaa kaikkia niihin osoittavia linkkejä. Muiden tekemien linkkien muuttaminen on mahdotonta. Tällöin tulee ratkaisuksi edelleenohjaus jolla selain saadaan kulkeutumaan automaattisesti uuteen osoitteeseen.
Voit lukea ensin yleisohjeen ja sen jälkeen kokeilla edelleenohjausta seuraavilla ohjeilla:
- Ota yhteys www.cc.jyu.fi-palvelimeen SSH Secure Shell -ohjelmalla.
- Muuta nanonanon opiskelu-kansion nimeksi opinnot.
- Voit kokeilla selaimella kuinka kaikki opiskelu-kansioon osoittaneet linkit rikkoutuivat edellisen muutoksen takia. Korjataan asia edelleenohjauksella
- Siirry nanonanon sivuston juurikansioon ja luo .htaccess-tiedosto esimerkiksi komennolla
nano -w .htaccess
-w-parametri kertoo nano-ohjelmalle, ettei tiedostoa saa rivittää automaattisesti. Tähän tiedostoon sijoitetaan kaikki Apachelle tarkoitetut komennot. Lisää .htaccess-tiedostoon rivi:Redirect permanent /~omatunnus/nanonano/opiskelu/ http://www.cc.jyu.fi/~omatunnus/nanonano/opinnot/
Edelleenohjattavan sivun (tiedoston) osoite kerrotaan absoluuttisesti palvelimen juuresta lukien. Uusi osoite pitää ilmoittaa kokonaisuudessaan. - Kokeile selaimella toimivatko linkit nyt.
- Jättämällä permanent-sana pois saataisiin tehtyä väliaikainen edelleenohjaus, jonka kohdalla esim. google säilyttää muistissaan alkuperäisen osoitteen mutta hakee sisällön uudesta osoitteesta.
- Tyypillisin esimerkki edelleenohjauksesta on WWW-palvelimien automaattisesti tekemä edelleenohjaus
jos www-sivun osoite viittaa kansioon mutta osoitteesta jätetään pois viimeinen /-merkki. esim.
annetaan osoitteeksi
http://appro.mit.jyu.fi/www/demot/demo7
eikä
http://appro.mit.jyu.fi/www/demot/demo7/.
Ensimmäinen osoite viittaa demo7-nimiseen tiedostoon ja jos
sitä ei löydy niin Apache
edelleenohjaa automaattisesti demo7/-kansioon.
Kokeile mitä Web-Sniffer sanoo osoitteista:
Salasanasuojaus
Suojaus salasanalla -mallivideo
Yksittäinen kansio on helppo suojata salasanalla.
- Suojataan nanonanon dokumentit salasanalla. Lisää artikkelit-kansioon
.htaccess-tiedosto ja kirjoita sinne:
AuthUserFile /foo/bar/tunnus/.users AuthGroupFile /dev/null AuthName ByPassword AuthType Basic <Limit GET> require valid-user </Limit>
AuthUserFile-kohtaan pitää kertoa hakemistopolku tiedostoon josta löytyvät käyttäjätunnukset ja salasanat. Tämä polku pitää tarkistaa WWW-palvelimesta (www.cc.jyu.fi) eikä se siis onnistu esim. kannosta tai tukista.- Siirry www/nanonano/artikkelit/-kansioon
- Kirjoita komento pwd niin saat www-palvelimessa toimivan hakemistopolun. Polku on jokaisella käyttäjällä erilainen!
- Laita oikea polku .htaccess-tiedostoon, lisää /-merkki ja polun perään tiedostonnimeksi .users
- Luo käyttäjätunnus ja salasana komennolla:
htpasswd -c .users tunnus
- Lisää lukuoikeudet kaikille tiedostoon .users, niin palvelin pystyy lukemaan käyttäjätunnukset ja salasanat. Käyttäjätiedoston salasanat ovat kryptattuja, mutta salaamatonta yhteyttä käyttävään salasanavarmennukseen ei voi yksinään luottaa tärkeitä tietoja välitettäessä.
- Jos sinulla ennestään on jo olemassa .users-tiedosto ja haluat lisätä siihen tunnuksia niin komento on:
htpasswd .users tunnus
- Kokeile kysyykö selain tunnusta ja salasanaa.
- Tarkemmin hakemistojen suojaamisesta voi lukea atk-keskuksen ohjeesta.
SSI (Server Side Includes)
SSI-komennoilla voi lisätä WWW-sivuihin dynaamista toiminnallisuutta kuten kaikille sivuille saman navigointilinkistön tai päivityspäivämäärän. WWW-palvelin tulkitsee xhtml-dokumenttiin upotetut komennot ennen sivun lähettämistä selaimelle. SSI:stä voi lukea tarkemmin Riku Nykäsen seminaariesitelmästä tai Apache-www-palvelimen SSI-dokumentaatiosta.
- Helpotetaan Nanonanon sivuston ylläpitoa siirtämällä kaikille dokumenteille yhteinen navigointi yhteen tiedostoon josta sitä on helppoa keskitetysti ylläpitää.
- Aloita uusi tyhjä dokumentti. Kopioi tähän dokumenttiin
Nanonanon etusivulla olevan navbar-osan lähdekoodi.
Muuta kaikki navigointipalkin linkit absoluuttisiksi, jotta samat linkit toimivat millä tahansa sivulla atk-keskuksen www-palvelimelta. Esim:
<li><a href="http://www.cc.jyu.fi/~omatunnus/nanonano/artikkelit/">Artikkelit</a></li>
- Tallenna navigointipalkki navbar.html-nimelle.
- Siirrä navbar.html SFTP:llä nanonano-hakemistoon.
- Siirry www/nanonano/-kansioon SSH-pääteyhteydellä.
-
Lisää nanonano-hakemistossa sijaitsevaan
.htaccess-tiedostoon seuraavat asetukset:
# Käsketään palvelimen etsiä mahdolliset SSI-komennot .shtml-päätteisistä tiedostoista AddHandler Server-Parsed .shtml AddType text/html .shtml
Näillä asetuksilla .shtml-päätteisten tiedostojen sisältävät SSI-komennot tulevat käsitellyiksi palvelimella ja selaimet saadaan tulkitsemaan esiprosessoidut sivut html:nä.Tavallisia .html-päätteisiä tiedostoja ei kannata automaattisesti parsia SSI-komentojen varalta koska se olisi palvelimelle liian raskasta ja turhaa työtä.
Apache 2 -www-palvelin jakaa oletuksena .shtml-päätteiset XHTML-tiedostot text/xml-muodossa mikä ei sovi kaikille selaimille ja validaattoreille joten pitää määrätä mediatyypiksi text/html.
- Muuta index.html-tiedoston nimeksi index.shtml.
- Muuta index.shtml-tiedostoa siten, että korvaat
navbar-lohkon seuraavalla html-kommentilla, joka toimii myös
SSI-komentona:
<!--#include virtual="navbar.html"-->
- Kokeile selaimella miten nanonanon sivu toimii nyt ATK-keskuksen
www-palvelimelta:
http://www.cc.jyu.fi/~omatunnus/nanonano/
Jos kaikki meni oikein niin edellä lisäämäsi SSI-komennon tilalla pitäisi selaimessa näkyä ihan normaali navigointipalkki, jonka WWW-palvelin lisäsi navbar.html-tiedostosta SSI-komennon kohdalle. - Varmista, että navigointipalkin linkit toimivat! Joko kokeilet kaikkien linkkien toiminnan itse tai tarkistutat sivun W3C:n linkcheckerillä.
- Kokeillaan lisätä SSI:n avulla myös dokumentin muutosaika sivulle. Lisää index.shtml-tiedoston loppuun rivit:
<!--#config timefmt="%Y-%m-%e %T"--><!--#echo var="LAST_MODIFIED"-->
Ensimmäinen kommentti määrää SSI:n päivämäärämuotoilun ja jälkimmäinen aiheuttaa varsinaisen muutosajankohdan lisäämisen. Kokeile selaimella ilmestyikö muutosaika sivulle. - Lisää SSI:n avulla navigointipalkki ja muutosajankohta linkit-hakemistossa olevalle sivulle. Muista tehdä alihakemistosta oikeanlainen suhteellinen tiedostoviittaus navbar.html-tiedostoon. Muista myös nimetä tiedosto .shtml-päätteiseksi. Mikäli tekisimme muutokset myös kaikkiin muihin Nanonanon sivuihin niin saisimme keskitettyä navigoinnin ylläpidon yhteen tiedostoon.
- Mikä ongelma on vältetty tallentamalla jokainen dokumentti omaan kansioonsa ja kansion indeksitiedostoksi? Olisivatko sivuston linkit vielä ehjiä jos kaikki tiedostot eivät olisi indeksidokumentteja?
- Varmista W3C:n LinkChecker-ohjelmalla, että navigointilinkit toimivat varmasti kaikilla alasivuilla.
Monikielisyys
HTTP-protokolla ja Apache-WWW-palvelin tukevat suoraan automaattista kielenvalintamekanismia, joka palauttaa selaimelle oikeankielisen dokumentin selaimen asetuksien mukaan. Selaimien kieliasetuksia voi säätää suoraan niiden asetuksista ja voi esim. laittaa kielet mieleiseensä järjestykseen.
Muutetaan Nanonanon sivuston etusivu monikieliseksi seuraavasti:
- Lisätään .htaccess-tiedostoon seuraavat rivit:
# Tehdään var-päätteisistä tiedostoista tyyppikartta-tiedosto, # joka kertoo mikä tiedosto sisältää mitäkin kieltä AddHandler type-map .var # Käytetään kansion indeksitiedostona index.var-tiedostoa # tavallisen index.shtml-tiedoston sijaan # Määrätään indeksitiedostovaihtoehdot tärkeysjärjestyksessä: DirectoryIndex index.var index.html index.shtml index.htm # Määrätään kielten oletusjärjetys, ensin englanti ja sitten suomi. # Tätä järjestystä käytetään jos selain ei itse ilmoita selkeää paremmuusjärjestystä LanguagePriority en fi # Varmistetaan, että selaimelle tarjotaan dokumentti myös jos selaimen haluamia # kielivaihtoehtoja ei löydy ForceLanguagePriority Prefer Fallback
- Seuraavaksi luodaan index.var-tiedosto ja lisätään siihen rivit:
URI: index.en.shtml Content-type: text/html Content-language: en URI: index.fi.shtml Content-type: text/html Content-language: fi
Yllä kerrotaan, että index.en.shtml-tiedosto sisältää englanninkielisen version ja index.fi.shtml-tiedosto suomenkielisen version.
- Kopioi alkuperäinen nanonanon etusivu eli index.shtml sekä index.en.shtml että index.fi.shtml-nimille.
- Muokkaa index.en.shtml-tiedostoa ja käännä sen sisältö
ainakin osittain englanniksi.
- Muista merkitä dokumentin kieli
html
-elementinxml:lang
-ominaisuuteen arvollafi
taien
. - Amayssa tämä onnistuu napauttamalla ensin rakennenäkymästä (Views | Show structure) html-elementtiä, sitten laittamalla työkalupalkin Attributes valinnan alta kohtaan lang ruksin ja lopuksi valitsemalla valintalistasta kielen Finnish tai English.
- Laita kielenmääritys myös suomenkieliseen dokumenttiin.
- Muista merkitä dokumentin kieli
- Kokeile selaimella Nanonanon etusivua. Muuta selaimen kieliasetuksia ja kokeile muuttuuko sivu (esim. Mozillassa Edit | Preferences | Navigator | Languages, Opera File | Preferences | Languages).
- Lisää suomenkieliseen tiedostoon linkki suoraan englanninkieliseen tiedostoon ja päinvastoin ihan siltä varalta, että jotkut käyttäjät eivät osaa säätää selaimensa kieliasetuksia. Huomaa, että maan lippu ei ole hyvä symboli kielelle.
- Kokeile mitä tapahtuu jos poistat .htaccess-tiedostosta ForceLanguagePriority-rivin ja poistat selaimen antamista kielivaihtoehdoista kokonaan suomen ja englannin ja laitat tilalle esim. arabian.
Tarkemmin Apachen automaattisesti kielivalinnasta voi lukea dokumentista Apache Content Negotiation.