1.3. Opsætning af Apache

Apaches opsætningsfiler kan du finde i PREFIX/conf. Den fil du skal have fat i er httpd.conf. På Red Hat og SuSE-systemer finder du filen i /etc/httpd/conf/. Denne fil indeholder et hav af valgmuligheder, så vi vil kun lige berøre de mest basale her. I Red Hat 8.0 findes desuden en række opsætningsfiler i /etc/httpd/conf.d/ f.eks. php.conf og perl.conf.

1.3.1. Port

Denne parameter angiver hvilken port Apache skal lytte på. Normalt kører en webserver på port 80, hvilket den dog kun kan hvis du har installeret den som "root". Hvis du har installeret Apache som standard bør du nok vælge port 80.

1.3.2. Logfiler

Apache laver to logfiler som udgangspunkt — en tilgangslog, som fortæller hvem der har besøgt din server, og en fejllog, som fortæller dig om alle fejl der opstår mens serveren kører. Hvilke oplysninger, der står i din tilgangslog afhænger af dels hvilke du sætter serveren til at skrive og dels hvilke oplysninger klienten vil aflevere. Det første sætter du op i et LogFormat-direktiv. I standard httpd.conf-filen er der lavet fire skabeloner (combined, common, referer og agent), men du kan naturligvis også lave dit eget format.

For fejlloggen kan du også bestemme hvor alvorlige begivenheder skal være førend de skrives ned - dette defineres på 8 forskellige niveauer (fra debug til emergency).

En tredje type logfil som kan være meget nyttig hvis du vil afvikle CGI-programmer på din webserver, er ScriptLog. Denne logfil vil føre en log over de fejlbeskeder dine CGI-programmer afgiver. Det er dog vigtigt at der sættes en maksimum på størrelsen af denne logfil, da den ellers hurtigt kan blive for stor. Dette kan gøres med parameteren ScriptLogLength. Eksempel på anvendelse:

ScriptLog PREFIX/log/scriptlog
ScriptLogLength 5192880
Dette fortæller Apache at den skal lave en logfil der hedder scriptlog, og at denne fil må maksimalt være 5 Mb.

1.3.3. Options

Options er en af de vigtige direktiver at kende, idet den sætte nogle overordende regler for det område den gælder for (Ved Files-, Directory- og Location-direktiverne kan man have forskellige options, der gælder for forskellige dele af serveren).

De vigtigste parametre til Options er:

1.3.4. Files, Directory og Location

Gennem Files- og Location-direktiverne kan du påføre specielle regler for dele af din webserver. Dette kunne f.eks. være at et givet område kun kunne ses, hvis man sad på serveren selv eller ligende.

Location anvendes til at implementere regler relativt i forhold til deres URL. Alt i området /spoing/ må kun ses fra .dk-domæner eller ligende.

Directory anvendes til at implementere regler, men tager udgangspunkt i filsystemet. Således ville man f.eks. kunne implementere en regel der beskyttede alt der ligger i /home/web/htdocs/spoing/, så det kun kan ses fra .dk-domæner.

Files kan anlægge filtre der gælder på fil-niveau. Typiske anvendelser af Files, kunne f.eks. være at sikre at dine .htaccess-filer og opsætningsfiler ikke kan hentes af almindelige brugere. Hvis du bruger emacs vil den ofte efterlade sikkerhedskopier der hedder FILNAVN~. Disse kan man også sikre ikke kan ses gennem webserveren.

Det er muligt at kombinere Files med enten Directory eller Location, således vil en given regel kun gælde for nogle filer i et givet område. Et eksempel kunne være:

<Directory />
      Options +ExecCGI +FollowSymLinks
      <Files ~ "\.cgi$">
      SetHandler cgi-script
      </Files>
</Directory>

Her tillades at der køres CGI-programmer, hvis de har endelsen .cgi, overalt på maskinen, mens alle filer med en anden endelse vil blive leveret som normalt.

CGI står for "Common Gateway Interface". Det er en veldefineret måde at udføre scripts på webserveren, oftest ud fra brugerens id, eller ud fra brugerens menu-valg. Der kan hentes masser af information om CGI på http://cgi.resourceindex.com.

1.3.5. Adgangskode til websider

Med Apache er det muligt at sætte adgangskode på udvalgte dele af et websted hvis modulet mod_access er installeret. Dette kan bruges til at sikre at kun familie, venner og kollegaer får adgang til nogle bestemt sider på dit websted. Første gang adgangskode skal sættes op er det lidt besværligt at få overblikket. Derfor har vi sat en realistisk side op og taget filerne direkte der fra. Følgende filer indgår i opsætningen af adgangskode.

Først skal der oprettes en fil med få brugere. For nemheds skyld kaldes den ene bruger for 'demo' med adgangskoden 'demo'. Man kan selv vælge hvad filen skal hedde og hvor den skal ligge. Her hedder bruger-filen /home/chlor/htuser. Ved første bruger skal filen oprettes med -c. Herunder oprettes brugeren 'demo' og 'john'.

[chlor@sslug]$ htpasswd -c /home/chlor/htuser demo
[chlor@sslug]$ htpasswd /home/chlor/htuser john

Pas på ikke at bruge kommandoen -c anden gang, for så slettes filen. Filen med de to brugere ser nu således ud:

demo:2iYw72d6bnpxg
john:..HEJdavUser2

Begge adgangskoder er krypteret med 'crypt', så de kan ikke læses. Brugeren 'john's adgangskoder er ikke det du ser, men noget meget kryptisk. Med brugerfilen oprettet, kan den første .htaccess oprettes. I dette eksempel ligger filen i /home/chlor/public_html/htaccess/ og ser således ud:

AuthType Basic
AuthName "Beskyttet webside"
AuthUserFile /home/chlor/htuser
Require valid-user

AuthType er sat til Basic da det er det enkleste. AuthName er den tekst, der vises når man skal logge ind på siden. Det nemmeste er at se på eksempel her: http://www.sslug.dk/~chlor/htaccess/ hvor du samtidigt kan prøve at logge ind. Alle brugere der er nævnt i /home/chlor/htuser har adgang ved at bruge kommandoen Require valid-user.

Dernæst ønsker vi et andet subdir hvor kun 'demo' og 'john' har adgang. Dette kan gøres enten ved at skrive alle de brugere der har adgang, eller ved at oprette en gruppe fil. Det nemmeste er at skrive navnene, og så ser filen /home/chlor/public_html/htaccess/demojohn/.htaccess således ud:

AuthType Basic
AuthName "Beskyttet demojohn"
AuthUserFile /home/chlor/htuser
Require user john demo

Har man mange forskellige sub-dir der nemmest administreres gruppevis, oprettes en gruppefil med navnet /home/chlor/htgroup hvor gruppen hedder fortrolig med følgende indhold:

fortrolig: john demo

Et nyt sub-dir oprettes hvor kun denne gruppe har adgang, i dette eksempel /hemmelig/. En ny .htaccess oprettes i /home/chlor/public_html/htaccess/hemmelig/ med følgende indhold:

AuthType Basic
AuthName "Beskyttet gruppe"
AuthUserFile /home/chlor/htuser
AuthGroupFile /home/chlor/htgroup
Require group fortrolig

Ovenstående kan afprøves her: http://www.sslug.dk/~chlor/htaccess/hemmelig/. Er du allerede logget ind på siden med 'demo', må du enten prøve med programmet lynx eller lukke din browser ned og starte den igen for at blive spurgt om adgangskode igen, samt se teksten "Beskyttet gruppe".

I det sidste eksempel på en .htaccess fil, er det kun brugeren 'john' der kan udføre en POST kommando, hvor alle andre brugere kun kan udføre en GET. Dette kan bruges i et sub-dir hvor det kun er 'john' der må bruge en html-side med en submit-knap der udfører en POST.

AuthType Basic
AuthName "Beskyttet, kun john må skrive"
AuthUserFile /home/chlor/htuser
AuthGroupFile /home/chlor/htgroup

<LIMIT GET>
Require valid-user
</LIMIT>

<LIMIT GET POST>
Require user john
</LIMIT>

For at aktivere adgangskoder skal Apaches opsætningsfil /etc/httpd/conf/httpd.conf (eller /etc/apache/httpd.conf på Debian) rettes fra:

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/html">
....
AllowOverride None
....
</Directory>
til:
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/html">
....
AllowOverride All
....
</Directory>

1.3.6. Virtuelle værter med Apache

En Linux-maskine med Apache kan nemt være webserver for mange domæner på en gang. Man opretter såkaldte virtuelle værter på maskinen. Har du en DNS-server skal du sørge for at alle dine virtuelle webservere er oprettet med samme IP-adresse. Har du ikke DNS, så sørg for at dine /etc/hosts-filer har linjer med samme IP-nummer og hver sit webserver maskinnavn. Eksempel for et hjemmenetværk:

192.168.1.1     www.hjemmenet www
192.168.1.1     test.hjemmenet test 

Med mindre du anvender NAT (bag en firewall) så kan du se din IP-adresse med en browser på http://myip.dk.

Dernæst skal webserveren sættes op, så de to virtuelle webservere tager fat i hver deres kataloger på harddisken. Lad os i eksemplet anvende /home/www/www.hjemmenet og /home/www/test.hjemmenet. Man kan tænke på at de to steder er til den egentlige webserver, og /home/www/test.hjemmenet er et test-område til nye hjemmesider.

Man skal redigere httpd.conf (Red Hat /etc/httpd/conf/httpd.conf). Led efter følgende tekst

### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them.
# Please see the documentation at <URL:http://www.apache.org/docs/vhosts/>
# for further details before you try to setup virtual hosts.
# You may use the command line option '-S' to verify your virtual host
# configuration.

Hvis webserveren ikke skal svar på alle boksens IP-adresser indsætter du IP-adressen på webserveren under NameVirtualHost, ellers sætter du en stjerne som markerer at den skal svare på alle IP-adresser.

NameVirtualHost *

eller

NameVirtualHost 192.168.1.1
<VirtualHost *>
  ServerName www.hjemmenet
  DocumentRoot /home/www/www.hjemmenet
  <Directory "/home/www/www.hjemmenet/">
    Options Indexes FollowSymLinks Includes
    AllowOverride None
    Order allow,deny
    Allow from all
    XBitHack full
  </Directory>
  DirectoryIndex index.shtml index.html index.htm index.php

  ServerAdmin root@localhost
  ErrorLog logs/www-error_log
  CustomLog logs/www-access_log common
</VirtualHost>

<VirtualHost *>
  ServerName test.hjemmenet
  DocumentRoot /home/www/test.hjemmenet
  <Directory "/home/www/test.hjemmenet/">
    Options Indexes FollowSymLinks Includes
    AllowOverride None
    Order allow,deny
    Allow from all
    XBitHack full
  </Directory>
  DirectoryIndex index.shtml index.html index.htm index.php

  ServerAdmin root@localhost
  ErrorLog logs/test-error_log
  CustomLog logs/test-access_log common
</VirtualHost>

Når du genstarter Apache så kan det være at du ikke kan gemme logfilerne (logs/www-error_log). Se efter ServerRoot i httpd.conf og lav kataloget/katalogerne til logfilerne. Eksempel

ServerRoot /etc/apache

og da ErrorLog og CustomLog, så skal man lige som root skabe kataloget til log-filerne:

[root@hven /root]# mkdir /etc/apache/logs

Som det kan ses har vi tilladt at man følger links "FollowSymLinks" (pas på hvis disse peger udenfor DocumentRoot-området). Vi har også sat at man leder efter indeks-filer med navne index.shtml, index.html, index.htm eller index.php. Vi har med "Includes" valgt, at webserveren skal fortolke hjemmesider, så du kan opdele siderne i forskellige filer, der så indlæses af serveren via linjer, såsom

<!--#include virtual="venstremenu.incl" -->