Product SiteDocumentation Site

11.2. Nett-tjener (HTTP)

Falcot Corp-administratorene besluttet å bruke Apache HTTP-tjeneren, inkludert i Debian Bullseye med versjon 2.4.52.

11.2.1. Å installere Apache

Å installere apache2-pakken er alt som trenges. Den inneholder alle modulene, inkludert Multi-Processing Modules (MPM-er) som påvirker hvordan Apache håndterer parallell behandling av mange forespørsler, som bruker å bli levert i separate apache2-mpm-*-pakker. Den vil også trekke på apache2-utils som inneholder kommandolinjeverktøy som vi vil oppdage senere.
Når MPM brukes, påvirkes måten Apache vil håndtere samtidige forespørsler på betydelig. Med worker-MPM, bruker den threads (lettvektprosesser), mens med prefork-MPM bruker den en samling prosesser som er laget på forhånd. Med event-MPM vil den også bruke tråder, men de inaktive tilkoblingene (spesielt de som holdes åpne av HTTP keep-alive-funksjonen) blir levert tilbake til en øremerket management-tråd (ledelsestråd).
Falcot-administratorene installerer også libapache2-mod-php for å inkludere PHP 7.7-støtten i Apache. Dette fører til at standard hendelse MPM deaktiveres, og prefork som skal brukes i stedet. For å bruke event MPM kan man bruke php.fpm.
Apache er en modulbasert tjener, og mange funksjoner legges inn av eksterne moduler som hovedprogrammet laster inn under sin initialisering. Standardoppsettet kan bare aktivere de mest vanlige moduler, men å tillate nye moduler skjer ved ganske enkelt å kjøre a2enmod modul; for å koble fra en modul, er kommandoen a2dismod modul. Disse programmene oppretter (eller sletter) bare symbolske lenker i /etc/apache2/mods-enabled/, som peker på de aktuelle filene (lagret i /etc/apache2/mods-available/).
Med sitt standardoppsett, lytter nettjeneren på port 80 (som satt opp i /etc/apache2/ports.conf), og betjener sider fra /var/www/html/-mappen (som satt opp i /etc/apache2/sites-enabled/000-default.conf).

11.2.2. Legge til støtte for SSL

Apache 2.4 inkluderer SSL-modulen (mod_ssl) som kreves for sikker HTTP (HTTPS) ut av boksen. Den må bare være aktivert med a2enmod ssl, deretter må de nødvendige anvisningene legges til oppsettsfilene. Et oppsettseksempel er gitt i /etc/apache2/sites-available/default-ssl.conf.
Hvis du vil generere klarerte sertifikater, kan du følge seksjon Seksjon 10.2.1, «Gratis oppretting av tiltrodde sertifikater» og deretter justere følgende variabler:
SSLCertificateFile      /etc/letsencrypt/live/DOMENE/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/DOMENE/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/DOMENE/chain.pem
SSLCACertificateFile    /etc/ssl/certs/ca-certificates.crt
Det kreves noe ekstra forsiktighet hvis du ønsker å favorisere SSL-tilkoblinger med Perfect Forward Secrecy (disse tilkoblingene bruker flyktige øktnøkler som sikrer at kompromittering av tjenerens hemmelige nøkkel ikke resulterer i kompromittering av gammel kryptert trafikk som kan ha blitt lagret under sniffing på nettverket). Se på Mozillas anbefalinger, spesielt:
Som et alternativ til standard SSL-modulen er det en utvidelsesmodul kalt mod_gnutls, som leveres med pakken libapache2-mod-gnutls og aktivert med kommandoen a2enmod gnutls. Dessverre har versjonen som er pakket for Debian alvorlige problemer og sikkerhetsfeil, og er derfor ikke en del av Debian Bullseye-utgaven.

11.2.3. Oppsett av virtuelle verter

En virtuell vert er en ekstra identitet for nett-tjeneren.
Apache vurderer to forskjellige typer virtuelle verter: De som er basert på IP-adressen (eller porten), og de som er avhengige av domenenavnet til nett-tjeneren. Den første metoden krever tildeling av en annen IP-adresse (eller port) for hvert område, mens den andre kan arbeide på en enkelt IP-adresse (og port), og nettstedene er differensiert etter vertsnavnet sendt av HTTP-klienten (som bare fungerer i versjon 1.1 av HTTP-protokollen - heldigvis at versjonen er gammel nok til at alle kunder bruker den allerede).
Den (økende) knapphet på IPv4-adresser favoriserer vanligvis den andre metoden; imidlertid er det gjort mer komplisert om de virtuelle verter må levere HTTPS også, ettersom SSL-protokollen ikke alltid har levert navn-baserte virtuelle verter; Ikke alle nettlesere håndterer SNI-forlengelsen (Server Name Indication). Når flere HTTPS-nettsteder må kjøre på samme tjener, vil de vanligvis bli differensiert enten ved å kjøre på en annen port, eller på en annen IP-adresse (IPv6 kan hjelpe til der).
Standardoppsettet for Apache 2 gir navn-baserte virtuelle verter. I tillegg er en standard virtuell vert definert i /etc/apache2/sites-enabled/000-default.conf-filen; Denne virtuelle verten vil bli brukt hvis det ikke finnes en vert som matcher anmodningen fra klienten.
Hver ekstra virtuelle vert er deretter beskrevet av en fil lagret i /etc/apache2/sites-available/. Å sette opp et nettsted for falcot.org-domenet blir derfor en enkel sak ved å lage den følgende filen, og så aktivere den virtuelle verten med a2ensite www.falcot.org.

Eksempel 11.13. /etc/apache2/sites-available/www.falcot.org.conf-filen

<VirtualHost *:80>
ServerName   www.falcot.org
ServerAlias  falcot.org
DocumentRoot /srv/www/www.falcot.org
</VirtualHost>
Apache-tjeneren, satt opp så langt, bruker de samme loggfiler for alle virtuelle verter (selv om dette kan endres ved å legge til CustomLog-anvisninger i definisjonene til de virtuelle vertene). Det er derfor klokt å tilpasse formatet på denne loggfilen slik at den inneholder navnet på den virtuelle verten. Dette kan gjøres ved å opprette en /etc/apache2/conf-available/customlog.conf-fil som fastsetter et nytt format for alle loggfiler (med LogFormat-anvisningen), og ved å aktivere den med a2enconf customlog. CustomLog-linjen må også fjernes (eller kommenteres ut) fra /etc/apache2/sites-available/000-default.conf-filen.

Eksempel 11.14. The /etc/apache2/conf-available/customlog.conf file

# Nytt loggformat som inneholder (virtuelt) vertsnavn
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost

# Så bruker vi dette vhost-formatet som standard
CustomLog /var/log/apache2/access.log vhost

11.2.4. Vanlige anvisninger

Dette avsnittet gir en kort gjennomgang av noen av de oftest brukte Apache-oppsettsanvisningene.
Den viktigste oppsettsfilen inneholder vanligvis flere Directory-blokker. De åpner for å spesifisere ulike virkemåter for tjeneren, avhengig av plasseringen av filen som blir betjent. En slik blokk omfatter vanligvis Options- og AllowOverride-anvisninger.

Eksempel 11.15. Katalogblokk

<Directory /srv/www>
Options Includes FollowSymlinks
AllowOverride All
DirectoryIndex index.php index.html index.htm
</Directory>
Anvisningen DirectoryIndex inneholder en liste over filer som kan prøves når klientens forespørsel matcher en katalog. Den første filen som forekommer i listen brukes, og er sendt som en respons.
Anvisningen Options er etterfulgt av en liste av alternativer som kan aktiveres. Verdien None slår av alle valg; tilsvarende aktiverer All alle sammen unntatt MultiViews. Tilgjengelige valg inkluderer:
  • ExecCGI indikerer at CGI script kan kjøres.
  • FollowSymlinks forteller tjeneren at symbolske lenker kan bli fulgt, og at responsen skal inneholde innholdet av målet for slike koblinger.
  • SymlinksIfOwnerMatch forteller også at tjeneren skal følge symbolske lenker, men bare når koblingen dets mål har samme eier.
  • Includes aktiverer Server Side Includes (SSI i korthet). Dette er anvisninger som er innebygd i HTML-sider, og utført underveis for hver forespørsel.
  • IncludesNOEXEC tillater Serverside Includes (SSI), men deaktiverer exec-kommandoen og begrenser include-anvisninger til tekst/markup-filer.
  • Indexes forteller at tjeneren skal vise innholdet i en mappe hvis HTTP-forespørselen sendt av klienten peker på en katalog uten en indeksfil (dvs. når ingen filer omtalt i DirectoryIndex-anvisningen finnes i den aktuelle mappen).
  • MultiViews muliggjør forhandlinger om innholdet. Denne kan brukes av tjeneren for å returnere en nettside som matcher det foretrukne språket som er satt opp i nettleseren.
Anvisningen AllowOverride lister opp alle alternativer som kan aktiveres eller deaktiveres ved hjelp av en .htaccess-fil. En vanlig bruk av dette valget er til å begrense ExecCGI, slik at administratoren velger hvilke brukere som har lov til å kjøre programmer under nett-tjenerens identitet (www-data-brukeren).

11.2.4.1. Å kreve autentisering

I noen tilfeller trenges det begrenset tilgang til en del av et nettsted, slik at bare legitime brukere som gir et brukernavn og et passord får tilgang til innholdet. Disse funksjonene tilbys av mod_auth*-modulene.

Eksempel 11.16. .htaccess-fil som krever autentisering

Require valid-user
AuthName "Privat katalog"
AuthType Basic
AuthUserFile /etc/apache2/authfiles/htpasswd-private
Filen /etc/apache2/authfiles/htpasswd-private inneholder en liste over brukere og passord. Den er ofte håndtert med htpasswd-kommandoen. For eksempel brukes følgende kommando til å legge til en bruker eller endre passordet deres:
# htpasswd /etc/apache2/authfiles/htpasswd-private user
New password:
Re-type new password:
Adding password for user user

11.2.4.2. Adgangsbegrensning

Anvisningen Require regulerer adgangsbegrensninger for en mappe (og rekursivt for mappens undermapper).
Den kan brukes til å begrense adgangen basert på flere kriterier: Vi vil stoppe med å beskrive adgangsbegrensning basert på klientens IP-adresse, men det kan gjøres mye kraftigere enn det, særlig når flere Require-anvisninger kombineres i en RequireAll-blokk.

Eksempel 11.17. Tillat bare fra det lokale nettverket

Require ip 192.168.0.0/16

11.2.5. Logg-analysatorer

En logg-analysator er ofte installert på en nett-tjener; siden den første gir administratorer en presis idé om bruksmønstre på sistnevnte.
Falcot Corp-administratorene valgte AWStats (Advanced Web Statistics) til å analysere sine Apache-loggfiler.
Det første oppsettstrinnet er å tilpasse /etc/awstats/awstats.conf-filen. Falcot-administratorene holdt den uendret, bortsett fra følgende parametre:
LogFile="/var/log/apache2/access.log"
LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
SiteDomain="www.falcot.com"
HostAliases="falcot.com REGEX[^.*\.falcot\.com$]"
DNSLookup=1
LoadPlugin="tooltips"
Alle disse parametrene er dokumentert av kommentarer i male-filen. Spesielt beskriver LogFile og LogFormat-parameterene, plasseringen og formatet på loggfilen og informasjonen den inneholder;SiteDomain og HostAliases lister de ulike navnene som hovednettstedet er kjent under.
For områder med stor trafikk skal DNSLookup vanligvis ikke settes til 1. For mindre nettsteder, som for eksempel Falcot-eksemplet beskrevet ovenfor, tillater denne innstillingen mer lesbare rapporter med komplette maskinnavn i stedet for rå (enkle) IP-adresser.
AWStats er også aktivert for andre virtuelle verter; hver virtuell vert må ha en egen oppsettsfil, som for eksempel /etc/awstats/awstats.www.falcot.org.conf.

Eksempel 11.18. AWStats oppsettsfil for en virtuell vert

Include "/etc/awstats/awstats.conf"
SiteDomain="www.falcot.org"
HostAliases="falcot.org"
AWStats bruker mange ikoner lagret i /usr/share/awstats/icon/-mappen. For at disse ikonene skal være tilgjengelige på nettsiden, må Apache-oppsettet tilpasses ved å inkludere følgende anvisning (sjekk ut /usr/share/doc/awstats/examples/apache.conf for et mer detaljert eksempel):
Alias /awstats-icon/ /usr/share/awstats/icon/
Etter noen minutter (og så snart skriptet er kjørt et par ganger), er resultatene tilgjengelig på nettet: