Tässä osassa luetellaan
tavallisimpia/etc/apache2/ -hakemiston tiedostoissa
sijaitsevia
web-palvelimen toimintaa ohjaavia
asetuksia esimerkkien avulla. Näitä toimintaohjeita
nimitetään direktiiveiksi
http://httpd.apache.org/docs-2.0/mod/directive-dict.html.
Kunkin direktiivin tarkka syntaksi
määräytyy
direktiivin
http://httpd.apache.org/docs-2.0/mod/directives.html
mukaan,
mutta yleensä direktiivi määritetään yhdelle
riville
kirjoitettuna siten, että direktiivin nimeä seuraa
välilyönti ja sen jälkeen välilyönnein
(välierottimin, white spaces) erotettuna
parametrilista:
DirektiivinNimi Parametri1 Parametri2 ... ParametriN
Ristikkomerkillä (#) alkavat rivit ovat kommentteja ja
niillä ei ole mitään toiminnallista vaikutusta.
Direktiivi
voi olla myös monirivinen tietyn ominaisuuskokoelman
sisältävä
lohko (sektio). Nämä lohkot on merkitty HTML-kieltä
muistuttavalla
tavalla seuraavasti:
<Lohko>
Direktiivi1 Asetus
Direktiivi2 Asetus
...
</Lohko>
3.2.1 Dokumenttihakemisto ja hakemiston
indeksitiedosto
DocumentRoot /var/www/html
Ubuntu-tiedosto: /etc/apache2/sites-enabled/000-default.conf
Palvelimen dokumenttien juurihakemisto eli esim.
DocumentRoot /var/www/html
<Directory
/var/www/>
Ubuntu-tiedosto: /etc/apache2/apache2.conf
Lisäksi tulee
tarvittaessa muuttaa dokumenttien juurihakemiston
asetuksia vastaamaan haluttua:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
DirectoryIndex index.html index.cgi index.pl
index.php
index.xhtml index.htm
Ubuntu-tiedosto: /etc/apache2/mods-enabled/dir.conf
Hakemiston indeksitiedoston mahdolliset nimet.
Jos
HTTP-pyyntö lähetetään osoitteeseen
http://www.palvelin.invalid/hake/, niin Web-palvelin
yrittää
palauttaa ensisijaisesti dokumentin
/var/www/hake/index.html, jos sitä ei löydy,
dokumentin
/var/www/hake/index.htm
jne. Jos mitään indekstitiedostoiksi
määritellyistä
tiedostoista ei löydy, listataan hakemiston sisältö, jos
se on Indexes-direktiivillä sallittu.
3.2.2 Käyttäjien Web-hakemistot
UserDir public_html
Ubuntu-tiedosto: /etc/apache2/mods-enabled/userdir.conf
Tavallisten käyttäjien kotihakemiston
alla oleva Web-dokumentien tallennushakemisto.
Esimerkiksi
http://www.palvelin.invalid/~tunnus/juttu.htm =
/home/tunnus/public_html/juttu.htm Katso myös kappale
Tavallisen
käyttäjän Web-dokumentit tästä luvusta.
Ks. myös AliasMatch tämän dokumentin lopusta.
3.2.3 Muut tarjolla olevat hakemistot
Alias ja AliasMatch
Ubuntu-tiedosto (tavallisimmin): /etc/apache2/mods-enabled/alias.conf
Alias-direktiivin avulla dokumentteja voidaan
tarjota
myös muualta kuin DocumentRoot- ja
UserDir-direktiivien
määräämistä paikoista. Esim. URLin
http://www.domain.example/kuvat/ tiedostot
haetaan
hakemistosta /home/testi/kuvat seuraavalla
määrittelyllä:
Alias /kuvat/ "/home/testi/kuvat/"
<Directory "/home/testi/kuvat">
Options FollowSymlinks Indexes
AllowOverride None
Require all granted
</Directory>
AliasMatch toimii kuten Alias, mutta se sallii
säännönmukaisten lausekkeiden käyttämisen,
jolloin yhdellä lauseella voidaan määritellä
isonkin URL-joukon muuttuvaiset
dokumenttihakemistot. Eräs
esimerkki on UserDir-direktiivin käytöstä URLeissa
näkyvästä tildestä eroon hankkiutuminen. Jos
halutaan esim. korvata normaalit käyttäjien
Web-hakemistoihin
viittaavaat www.domain.example/~tunnus/ -tyyliset
URLit vaikkapa
www.domain.example/u/tunnus/ -tyyppisillä URLeilla,
tapahtuisi se
seuravasti:
AliasMatch ^/u/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2
3.2.4 Kuunnellut TCP-portit
Listen 80
Suse-tiedosto: /etc/apache2/ports.conf
Web-palvelimen kuuntelema oletusportti. Normaali
asetus on 80. Porteille, jotka ovat pienempiä kuin 1023,
httpd
pitää käynnistää
root-käyttäjänä. Web-palvelin voi kuunnella useita
portteja
samanaikaisesti, joille voidaan
virtuaalipalvelinmäärityksin
(VirtualHost) asettaa erilaisia porttikohtaisia
tehtäviä.
Useat Listen-direktiivit määritellään esimerkiksi
alekkaisille riveille. Portin arvo voi olla välillä
1-65535
(2 potenssiin 16, ei nolla).
3.2.5 Porttikohtainen VirtualHost
Ubuntu-tiedosto: /etc/apache2/ports.conf
Tavallisesti kuunneltu TCP-portti on kiinnitetty
haluttuun
virtuaalipalvelimeen määrityksin
Listen 80
Esimerkki: Porttikohtaisen virtuaalihostin luominen
- Luodaan TCP-portissa 81 toimiva virtuaalihost,
joka
tarjoaa juurihakemistonaan /var/www/html81-kansion
sisältöä
1) Lisätään tiedostoon /etc/apache2/ports.conf
kuuntelumääritys myös
TCP-porttia 81 varten
Listen 80
Listen 81
2) Luodaan hakemisto ja hakemiston indeksisivu
sudo mkdir /var/www/html81
echo "<h1>Palvelin 81</h1>" | sudo tee /var/www/html81/index.html
3) Luodaan ja editoidaan uuden virtuaalipalvelimen
asetukset
sudo nano /etc/apache2/sites-available/server81.conf
tiedoston sisällöksi kopioidaan pelkästään seuraavat
rivit:
<VirtualHost *:81>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html81
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
4) Otetaan käyttöön uusi luotu virtuaalipalvelinmääritys
sudo a2ensite server81
sudo systemctl restart apache2.service
7) Katsotaan tulosta osoitteesta http://localhost:81/
- Huom1: a2ensite-komento
tekee
symlinkin /etc/apache2/sites-enabled -kansioon
luodulle
virtuaalipalvelimelle (voisi tehdä käsinkin).
Virtuaalipalvelimen voi
ottaa pois käytöstä komentamalla
sudo
a2dissite virtual81
- Huom2: Jos otat virtuaalipalvelimen pois käytöstä
(a2dissite-komennolla), edellä luotuja
virtuaalipalvelinasetuksia
porttikuuntelumäärityksineen ei poisteta.
3.2.6 Muita säätöjä / apache2.conf
Ubuntu-tiedosto: /etc/apache2/apache2.conf
Timeout 300
Timeout sekunteina. Maksimiaika HTTP-pyynnön
vastaanotolle (GET, POST, ...) yhteyden avaamisesta.
Säädä vaikka 5 sekuntiin ja kokeile Web-palvelimeesi
tässä luvussa aiemmin esitettyä esimerkkiä
HTTP-siirtotapahtumasta.
KeepAlive On
Peräkkäiset HTTP-pyynnöt sallitaan
yhdelle yhteydelle.
MaxKeepAliveRequests 100
Montako pyyntöä yhdelle yhteydelle
sallitaan. Arvo 0 tarkoittaa rajoittamatonta. Jos
KeepAlive on "Off",
tällä ei ole vaikutusta.
KeepAliveTimeout 15
TimeOut peräkkäisille pyynnöille.
Muodostettua yhteyttä pidetään auki 15 sekuntia
mahdollista seuraavaa
pyyntöä varten.
AccessFileName .htaccess
Hakemistokohtaisen konfiguraatiotiedoston
nimi.
Nimeä ei ole syytä muuttaa. Tiedoston .htaccess voi
ajatella
olevan httpd.conf-tiedoston hakemistokohtainen jatke,
johon esimerkiksi
tavalliset käyttäjät voivat määritellä
omia asetuksia. Web-palvelimen ylläpitäjä
määrittelee httpd.conf-tiedostossa
AllowOverRide-direktiivein,
mitkä asetukset hakemistokohtaisissa
konfiguraatiotiedostoissa
voivat
ohittaa httpd.conf-tiedostossa määritellyt asetukset.
3.2.7 Multi-Processing Module (MPM)
event MPM
Jos käytetään isoja kuormia sietävää oletusarvoista
event MPM:ää, niin prosessien, säikeiden ja yhteyksien
asetuksia säädetään seuraavan tiedoston asetuksin.
Ubuntu-tiedosto: /etc/apache2/mods-enabled/mpm_event.conf
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
tällöin prosessilista näyttäysi esim. seuraavalta
ps aux | grep [a]pache2
root 4177 0.0 0.1 71584 4232 ? Ss 20:42 0:00 /usr/sbin/apache2 -k start
www-data 4180 0.0 0.1 360740 6092 ? Sl 20:42 0:00 /usr/sbin/apache2 -k start
www-data 4181 0.0 0.1 360740 6092 ? Sl 20:42 0:00 /usr/sbin/apache2 -k start
pstree -p 4177
apache2(4177)-+-apache2(4180)-+-{apache2}(4185)
| |-{apache2}(4187)
| |-{apache2}(4189)
...
`-apache2(4181)-+-{apache2}(4184)
|-{apache2}(4186)
|-{apache2}(4188)
...
prefork MPM
prefork MPM on perinteinen turvallinen ja vakaa mutta
heikompi
suorituskyvyltään ja isompi muistinkulkutukseltaan.
prefork MPM:n voi
ottaa käyttöön seuraavasti:
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo systemctl restart apache2.service
Asetuksia säädetään tällöin:
Ubuntu-tiedosto: /etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
tällöin prosessilista näyttäisi esim. seuraavalta ja
huomaa, että tällöin ei ole säikeitä käytössä
ollenkaan.
ps aux | grep [a]pache2
root 2840 0.0 0.1 75568 4456 ? Ss 18:07 0:00 /usr/sbin/apache2 -k start
www-data 2843 0.0 0.0 75592 3164 ? S 18:07 0:00 /usr/sbin/apache2 -k start
www-data 2844 0.0 0.0 75592 3164 ? S 18:07 0:00 /usr/sbin/apache2 -k start
www-data 2845 0.0 0.0 75592 3164 ? S 18:07 0:00 /usr/sbin/apache2 -k start
www-data 2846 0.0 0.0 75592 3164 ? S 18:07 0:00 /usr/sbin/apache2 -k start
www-data 2847 0.0 0.0 75592 3164 ? S 18:07 0:00 /usr/sbin/apache2 -k start
pstree -p 2840
apache2(2840)-+-apache2(2843)
|-apache2(2844)
|-apache2(2845)
|-apache2(2846)
`-apache2(2847)
Asetuksista:
StartServers 5
Palvelin käynnistetään siten,
että vapaita palvelinprosesseja (lapsiprosesseja) on
5 kpl.
MinSpareServers 5
MaxSpareServers 10
Odottavien (idlaavien) palvelinprosessien
(lapsiprosessien) minimi- ja maksimiarvot. Arvo 5
tarkoittaa sitä,
että jos Web-palvelin "palvelee" juuri tällä
hetkellä 13 asiakasta, niin se pyrkii pitämään 5
ylimääräistä prosessia mahdollisia tulevia
asiakkaita varten, jotta nämä saavat nopean
vastauksen. Jos
vapaana on yli 10 lapsiprosessia, ylimääräiset
poistetaan. Käynnissä olevat prosessit näet
esimerkiksi
komennolla ps
aux|grep [a]pache2
3.2.8 Muita säätöjä / envvars
/etc/apache2/envvars
-tiedosto sisältää monia
merkittäviä asetuksia mm.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Palvelimen lapsiprosessien tehollinen
käyttäjä ja käyttäjäryhmä.
Tälle käyttäjälle on annettava tarvittavat
Linux-käytöoikeudet (chmod) palvelimen jakamille tai
ajamille
tiedostoille. Yleensä se tarkoittaa vähintään "chmod o+x"-oikeuksia
kaikille
Web-dokumentteja ja -ohjelmia
sisältäville hakemistoille (ja myös kaikille
hakemistopolussa oleville hakemistoille).