Ari Rantala -> Oppaat -> Apache Web-palvelin: muistiinpanot

3. Apachen konfigurointi

3.1 Yleistä asetuksista

Ubuntu 16.04 LTS / Apache - Keskeiset tiedostot

Ubuntu 16.04 LTS:n mukana tulevan apache2-palvelimen perusasennuksen jälkeen keskeiset tiedostot ovat:

    1. /var/www/html on palvelimen dokumenttien juurihakemisto. Juurihakemistossa on oletusdokumenttina index.html, jonka saat näkyviin esim. http://localhost/

      Nämä asetukset löytyvät:
      /etc/apache2/sites-enabled/000-default.conf -tiedostossa
      DocumentRoot /var/www/html

      /etc/apache2/mods-enabled/dir.conf  -tiedostossa:
      DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

    2. /etc/apache2 -hakemistosta alihakemistoineen löytyy lähes kaikki Apachen asetuksiin liitttyvät tiedostot (usein conf-päätteiset)

    3. /etc/apache2/apache2.conf  Pääkonfigurointitiedosto

    4. /etc/apache2/sites-enabled/000-default.conf -tiedostossa oletusarvoisen (virtuaali)palvelimen keskisimmät asetukset (DocumentRoot yms.)

    5. /etc/apache2/mods-enabled/userdir.conf (tavallisia käyttäjiä koskevat asetukset)

      Vähemmän tärkeitä hakemistoja ja tiedostoja:

    6. /var/log/apache2/ -hakemistosta löytyvät lokitiedostot

Asetusten muokkaaminen

Apachen konfigurointi tapahtuu edellä lueteltujen asetustiedostojen avulla. Tässä luvussa esitetään yleiskatsaus yleisimpiin asetuksiin.

Asetuksia muokataan editoimalla asetustiedostoja esim. nano-, gedit- tai vi-editorilla esim.

sudo nano /etc/apache2/apache2.conf
sudo gedit /etc/apache2/apache2.conf &

Muutoksien vaikutukset näkyviin?

Muutosten jälkeen on lähes poikkeuksetta varminta:

  • Käynnistää Web-palvelin uudelleen. Joissakin tapauksissa Web-palvelin on sammutettava kokonaan (myös httpd-isäprosessi) ja käynnistettävä uudelleen.
  • Ladattava tarkastelun kohteena oleva dokumentti/CGI-ohjelman tulostus uudelleen käyttäen selaimien SHIFT+Reload tms.-toimintoa.

3.2 /etc/apache2/ - Tavallisimpia asetuksia

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).

Virheiden etsiminen: lokitiedostot

Lokitiedostojen avulla voidaan etsiä mm. palvelimen konfiguroinnista johtuvia virheitä.

/var/log/apache2/access.log

  • Nähdään, millaisia HTTP-pyyntöjä Web-palvelin on ottanut vastaan.

/var/log/apache2/error.log

  • Web-palvelimen generoimat virheilmoitukset
  • Tavallisesti hyödyllisin tiedosto etsittäessä virheitä
  • Määritellään yleensä suhteessa ServerRoot-direktiivin arvoon (esim /etc/ttpd) seuraaasti

Lokitiedostojen tutkiminen

Tulostetaan kaikki rivit:
sudo less /var/log/apache2/error.log
Tulostetaan viimeiset rivit:
sudo tail /var/log/apache2/error.log
Seurataan viimeisiä rivejä interaktiivisesti:
sudo tail -f /var/log/apache2/error.log

Lokitiedostojen analysointi

Vinkki: Ubuntuun voi asentaa Webalizer-nimisen lokianalysaattorin etenkin access.log-tiedoston analysointiin. Webalizerin asetustiedostoon /etc/webalizer/webalizer.conf on muutettava/tarkistettava minimissään seuraavat asetukset:
...
LogFile       /var/log/apache2/access.log
...
OutputDir      /var/www/webalizer
jolloin sen webalizer-komennolla generoimat graafiset yhteenvedot löytyvät osoitteesta:
http://www.omapalvelin.example/webalizer/

Muita lokitiedostoja

Muitakin lokitiedostoja on saatettu ottaa käyttöön. Tyypillisimmät ovat:
  • cgi.log CGI-ohjelmien suoritukseen liittyville ilmoituksille
  • suexec.log SuExec-CGI Wrapperin toimintaan liittyville ilmoituksille.
Katso näiden käyttöönottoon liittyvät asiat asianomaisista luvuista (6 ja 8).

Apachen moduulien hallinta

Apachen moduulit ovat ohjelmia, jotka kukin tarjoavat tiettyä toiminnallisuutta. Apache voi käyttää sekä staattisia aina käytössä olevia että dynaamisia käynnistyksen aikana ladattavia moduuleja.

Staattiset moduulit

Palvelimeen kiinteästi käännetyt staattiset moduulit voi listata Ubuntussa
sudo apache2 -l
Compiled in modules:
Compiled in modules:
core.c
mod_so.c # Mahdollistaa dynaamisten moduulien käytön
 mod_watchdog.c
http_core.c
mod_log_config.c
mod_logio.c
mod_version.c
mod_unixd.c

Dynaamiset moduulit

Järjestelmään asennetut tarjolla olevat dynaamiset moduulit aloituskonfiguratioineen ovat tarjolla kansiossa /etc/apache2/mods-available/
ls /etc/apache2/mods-available/
alias.conf alias.load auth_basic.load ... jne

Käytössä olevat moduulit näkee kansiosta /etc/apache2/mods-enabled/. Ne ovat symbolisia linkkejä vastaaviin tarjolla oleviin moduuleihin.
ls -la /etc/apache2/mods-enabled/
lrwxrwxrwx 1 root root alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root auth_basic.load -> ../mods-available/auth_basic.load
jne ...

Dynaamisen moduulin käyttöönotto - a2enmod

sudo a2enmod userdir
sudo systemctl restart apache2.service

Dynaamisen moduulin poisto käyttöstä - a2dismod

sudo a2dismod userdir
sudo systemctl restart apache2.service 

Linkkejä