Apache-www-palvelin

Tällä luennolla käsitellään oleellisimpia Apache-WWW-palvelimen ominaisuuksia.

Apache on maailman eniten käytetty WWW-palvelinohjelmisto.

Suurin osa WWW-sovellusten tarvitsemasta toiminnallisuudesta kannattaa tehdä jo WWW-palvelimella, koska selainten erot ja laajennuksien puute hankaloittavat joidenkin asioiden suorittamista selaimissa.

.htaccess

.htaccess on Apache-WWW-palvelimissa käytetty tiedosto, jolla voidaan muuttaa palvelimen asetuksia. .htaccess-tiedoston avulla voidaan toteuttaa mm. salasanasuojaus, edelleenohjaus ja MIME-tyyppien lisäykset.

Kaikki seuraavaksi kerrotut ominaisuudet toimivat Apache 2.2:ssa. Suurin osa toimii myös vanhemmissa Apache 2.0:ssa ja Apache 1.3:ssa. Seuraavat esimerkit tulee siis kirjoittaa .htaccess-tiedostoon. Huomaa, että yksi määritys on aina yhdellä rivillä. Komennon ja parametrien välit erotellaan aina välilyönneillä.

.htaccess-tiedosto sijoitetaan omaan www-kansioon. .htaccess-tiedostoon tehdyt asetukset vaikuttavat kaikkiin kyseisen kansion tiedostoihin ja alikansioihin tiedostoineen.

Edelleenohjaus

Edelleenohjaus tehdään HTTP:n Location-otsikkotiedoilla. Apachesta löytyy suoraan valmiit komennot tätä varten. Edelleenohjausta EI PIDÄ TEHDÄ käyttämällä väliaikaisia WWW-sivuja ja niihin tehtyjä epästandardeja virityksiä.

Väliaikainen edelleenohjaus (302)

Redirect /tt-appro/index.html http://appro.mit.jyu.fi/

Edelleenohjattavan sivun osoite kerrotaan palvelimen juuresta lukien. Kohdeosoite pitää kertoa kokonaisuudessaan.

Pysyvä edelleenohjaus (301)

Redirect permanent /tt-appro/index.html http://appro.mit.jyu.fi/

Pysyvä edelleenohjaus tehdään lisäämällä avainsana permanent.

Lisää tietoa Apachen edelleenohjauksesta

Useamman tiedoston edelleenohjaus

Jos halutaan samalla kertaa edelleenohjata useampi tiedosto samaan kohteeseen käytetään RedirectMatch-komentoa, joka ymmärtää kohdetiedostossa säännöllisiä lausekkeita (engl. regular expressions, regexp).

Edelleenohjataan kaikki pc-alkuiset tiedostot sekä kaikki win-alkuiset tiedostot:

RedirectMatch permanent /doc/tietokone/pc.* http://appro.mit.jyu.fi/doc/tietokone/
RedirectMatch permanent /doc/kayttojarjestelma/win.* http://appro.mit.jyu.fi/doc/kayttojarjestelma/

Virhedokumentti

Seuraavalla komennolla voidaan määrätä mikä dokumentti palautetaan, jos selain on pyytänyt dokumenttia, jota ei ole olemassa:

ErrorDocument 404 /~omatunnus/cgi-bin/virhedokumentti.html

Käytettävä merkistö

Joskus voi olla tarpeen määritellä käytettävä merkistö palvelimelle. Tarve tulee vastaan käytännössä silloin, kun käytetään jotain muuta merkistöä kuin oletuksena olevaa ISO-8859-1-merkistöä. Vaikka poikkeava merkistö olisi määritelty itse WWW-sivuille, voivat tietyt selaimet (ainakin Internet Explorer) käyttää silti palvelimen tarjoamaa merkistöä, jolloin voi tulla ongelmia esimerkiksi ääkkösten kanssa.

Oletusmerkistö määrätään .htaccess-tiedostoon AddDefaultCharset-komennon avulla, esim. seuraavasti:

AddDefaultCharset utf-8

Tiettyjen tiedostomuotojen merkistön voi asettaa seuraavalla tavalla:

AddCharset utf-8 .html .css .php .txt .js

Mediatyypit

Mediatyyppi kertoo selaimelle minkälainen tiedosto on kyseessä.

Selain ei saa itse arvailla tiedoston tyyppiä tiedostopäätteen perusteella.

Esimerkki mediatyypin määrittelystä .htaccess-tiedostossa AddType-komennolla:

#määrätään .html-päätteisten tiedostojen mediatyypiksi text/plain
AddType text/plain .html
AddType text/html .txt

Usein käytettyjä mediatyyppejä

AddType text/xml .xml
AddType text/xml .xsl
AddType application/x-ogg .ogg
AddType application/smil+xml .smil
AddType video/avi .avi
AddType video/x-ms-wmv .wmv    
AddType application/vnd.ms-excel .xls
Addtype application/msword .doc
Addtype application/x-msaccess .mdb
AddType audio/x-mp3 .mp3
AddType text/plain .sql
AddType application/octet-stream .exe
AddType application/xhtml+xml .xhtml

Esimerkki

Lisätietoa

Salasanasuojaus

Sijoita suojattavassa kansiossa olevaan .htaccess-tiedostoon rivit:

AuthUserFile /foo/bar/tunnus/html/.users
AuthGroupFile /dev/null
AuthName ByPassword
AuthType Basic
<Limit GET>
require valid-user
</Limit>

AuthUserFile-kohtaan annettava polku on oltava WWW-palvelimella toimiva ja sen on osoitettava salasanatiedostoon. Oikean polun alun voi tarkistaa jalava.cc.jyu.fi-koneessa kirjoittamalla siellä echo $HOME.

[anjoekon@jalava ~]$ echo $HOME
/nashome3/anjoekon

Saatuun polkuun pitää vielä lisätä html-kansio ja sen mahdolliset alikansiot. Esim.

/nashome3/anjoekon/html/www/.users

Salasanan ja käyttäjätunnuksen voi luoda komennolla htpasswd. Jos .users-tiedosto luodaan ensimmäistä kertaa tai tyhjennetään niin rivin on oltava muotoa:

htpasswd -c .users tunnus

Muut tunnukset saa luotua jatkossa komennolla:

htpasswd .users tunnus

Komennon antamisen jälkeen kysytään luodulle tunnukselle laitettava salasana.

Tämän salasanasuojauksen heikkous on se, ettei varsinaista uloskirjautumista pysty toteuttamaan. Uloskirjautuminen tapahtuu siis vasta suljettaessa selain. Uloskirjautumisen toteuttamiseen tarvitaan WWW-ohjelmointia, esim. PHP:tä.

Huomaa, että salasanasuojaus on vain kevyt suojausmenetelmä. Salasanat liikkuvat verkossa lähes salaamattomina ja osaava pystyy poimimaan ne verkkoliikenteestä. Toiset WWW-palvelimen käyttäjät saattavat pystyä myös tutkimaan WWW-hakemistojasi, vaikka niitä ei selaimella saisikaan näkyville.

Hakemiston indeksitiedosto

Selaimella voidaan pyytää hakemistoa esim. http://users.jyu.fi/~tunnus/harkka/. Hakemiston sisällä täytyy olla jokin dokumentti, jonka palvelin voi antaa selailijalle. Tavallisesti tämän tiedoston nimi index.html. Hakemistosta annettavan oletustiedoston voi muuttaa toiseksi luomalla hakemistoon .htaccess-nimisen tiedoston ja kirjoittamalla esimerkiksi komennon:

DirectoryIndex index.shtml index.php index.html

Tässä tapauksessa ensimmäisenä hakemistosta tarjotaan index.shtml-nimistä tiedostoa, toiseksi index.php-nimistä tiedostoa ja viimeiseksi index.html-nimistä tiedostoa. Ellei mitään näistä löydy hakemistosta, niin Apache luo HTML-sivun, joka näyttää hakemiston sisällä olevat tiedostot (jos automaattinen hakemistolistaus on palvelimen asetuksissa päällä).

Automaattinen kielivalinta (engl. content negotiation)

Apache mahdollistaa automaattisen kielivalinnan käyttäjän selaimen asetuksien perusteella.

Typemaps

Määrätään kansion indeksitiedostoksi index.var, joka kertoo tarkemmin, mikä tiedosto vastaa mitäkin kieltä. Indeksitiedostoksi voidaan antaa useita vaihtoehtoja, joista ensimmäistä löytyvää käytetään.

DirectoryIndex index.var index.html

Määrätään myös kielten tärkeysjärjestys (LanguagePriority), jos selain ei sitä itse kerro.

Lisäksi määrätään, että noudatetaan itse määrättyä tärkeysjärjestystä, jos selaimen antamista vaihtoehdoista löytyy kaksi yhtä hyvää (ForLanguagePriority Prefer). Ilman tätä palvelin antaisi virheen 300 (Multiple Choices) ja listan vaihtoehdoista.

Jos vaihtoehdoista ei löydy ollenkaan selaimen haluamia kieliä, niin määrätään noudatettavaksi omaa tärkeysjärjestystä (ForLanguagePriority Fallback). Ilman tätä määritystä saataisiin virhe 406 (Not Acceptable) ja lista vaihtoehdoista.

LanguagePriority en fi
ForceLanguagePriority Prefer Fallback

Määrätään vielä oikea käsittelijä .var-päätteisille tiedostoille:

AddHandler type-map .var

index.var-tiedostossa kerrotaan eri vaihtoehtojen osoitteet, niiden kielet ja mediatyypit. Muita valintaan vaikuttavia tekijöitä voisivat olla myös merkistö ja enkoodaus (pakkaus). Esimerkiksi suomenkielisestä dokumentista voisi löytyä pakkaamaton ja pakattu versio sekä näistä kummastakin text/html ja application/xhtml+xml -versiot.

URI: index.fi.html
Content-Language: fi
Content-Type: text/html

URI: index.en.html
Content-Language: en
Content-Type: text/html

Lisää tietoa Apachen kielivalinnasta

Toistuvien elementtien liittäminen

Usein halutaan sivulle toistuvia elementtejä, kuten navigointi, logot, tekijätiedot jne. Toistuvan elementin muuttaminen vaatii paljon turhaa työtä. Tässä yksinkertaisia menetelmiä samojen elementtien liittämiseksi useille WWW-sivulle:

SSI (Server Side Includes)

SSI-komennot ovat HTML-dokumenttiin upotettuja käskyjä, joilla voidaan tulostaa muuttujien arvoja tai suorittaa ohjelmia.

Tietohallintokeskuksen WWW-palvelimessa SSI-komentoja sisältävien tiedostojen pääte pitää olla .shtml.

Palvelinta voi käskeä tulkitsemaan SSI-komennot mistä tahansa tiedostoista määräämällä:

AddType text/html .paate
AddHandler server-parsed .paate

SSI-esimerkkejä

Kertoo dokumentin muutosajankohdan:

<!--#echo var="LAST_MODIFIED"-->

Päivämäärän esitystapaa voidaan muuttaa SSI-komennolla:

<!--#config timefmt="%Y-%m-%e %T"-->

Lisää tähän kohtaan dokumenttia tiedoston linkit.ssi sisällön:

<!--#include virtual="linkit.ssi"-->

Liitettävään tiedostoon voidaan viitata myös puoliabsoluuttisella viitteellä:

<!--#include virtual="/~omatunnus/hakemistoni/address.include"-->

SSI:llä voidaan määrätä vakiomerkkijono, jota tulostetaan useampaan paikkaan dokumenttia:

<!--#set var="title" value="Nanonano"-->
<!--#set var="css" value="/~omatunnus/hakemistosi/demo2.css"-->
<head>
  <title><!--#echo var="title" --></title>
  <meta name="keywords" content="<!--#echo var="title" -->">
  <link href="<!--#echo var="css" -->" rel="stylesheet" type="text/css" title="Tyylipohja" />
</head>
<body>
  <h1><!--#echo var="title" --></h1>

Vakiomuuttujat voi keskittää vaikkapa yhteen tiedostoon.

Lisätietoja SSI:stä löytyy osoitteista:

Käyttäjien kommentit

Kommentoi Lisää kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/itkp1011/luennot/apache/
© Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
2017-11-16 09:54:58
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta