Apache VirtualHost-oppsett på Debian 13

Hvordan sette opp en VirtualHost for Apache på Debian 13 for et lokalt PHP-prosjekt

0 kommentar(er)

Når du utvikler flere PHP-applikasjoner på en Debian-maskin, blir det snart uoversiktlig å bruke bare http://localhost.

Apache VirtualHosts lar deg tilordne et lokalt domene til hvert prosjekt. For eksempel:

  • http://mon-projet.local
  • http://blog.local
  • http://app.local

Hver navn kan så peke mot en forskjellig mappe.

I denne artikkelen vil vi se hvordan du konfigurerer en VirtualHost for Apache på Debian 13 (Trixie) for et lokalt PHP-prosjekt.

Eksemplet vil bruke:

  • Debian 13;
  • Apache 2.4;
  • PHP 8.4;
  • et prosjekt plassert i /var/www/mon-projet;
  • det lokale domenenavnet mon-projet.local.

Merknad: denne konfigurasjonen er ment for lokalt utvikling. Den er ikke en produksjonskonfigurasjon.

1. Installer Apache og PHP


Hvis Apache og PHP ikke er installert, begynn med å oppdatere pakkelisten:

Bash
sudo apt update
sudo apt upgrade

Installer derefter Apache og PHP:

Bash
sudo apt install apache2 php libapache2-mod-php

Debian 13 tilbyr nå PHP 8.4 som standardversjon. Pakken php er en avhengighetspakke som peker mot den stabilste versjonen av PHP som leveres av Debian.

Du kan sjekke de installerte versjonene med:

Bash
apache2 -v
php -v

Du bør få noe som ligner på:

Text
Server version: Apache/2.4.68

og:

Text
PHP 8.4.x

De eksakte revisjonsnummer kan selvfølgelig endre seg med sikkerhetsoppdateringer av Debian.

Sjekk også at Apache-tjenesten fungerer:

Bash
sudo systemctl status apache2

Hvis nødvendig:

Bash
sudo systemctl enable --now apache2

2. Lag prosjektmappe


Vi vil plassere vårt prosjekt her:

Text
/var/www/mon-projet

Lag mappe:

Bash
sudo mkdir -p /var/www/mon-projet

For å teste konfigurasjonen raskt, lager vi en PHP-fil:

Bash
sudo nano /var/www/mon-projet/index.php

Legg til:

PHP
<?php
echo '<h1>Mon projet fonctionne !</h1>';
echo '<p>PHP fungerer med Apache.</p>';

Lagre filen.

2.1. Om rettigheter


Apache fungerer normalt med systembrukeren www-data.

Det er imidlertid ikke nødvendig å gi full eierskap til prosjektet til www-data.

I et utviklingsmiljø er det ofte bedre at din Linux-bruker blir eier av prosjektfilene, mens Apache bare får de rettigheter som applikasjonen virkelig trenger.

For enkelttest kan du for eksempel bruke:

Bash
sudo chown -R $USER:$USER /var/www/mon-projet

Applikasjoner som krever skrivbar mappe, som Symfony eller Laravel, vil senere trenge tilpassede rettigheter på deres cache-, logg- og fil-opplastningsmapper.

3. Opprett en Apache VirtualHost


Apache-konfigurasjoner for nettsteder lagres i:

Text
/etc/apache2/sites-available/

Lag fila:

Bash
sudo nano /etc/apache2/sites-available/mon-projet.conf

Legg til følgende konfigurasjon:

<VirtualHost *:80>
ServerName mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

3.1. Forklaringer


VirtualHost *:80

Apache lytter her på HTTP-porten 80, uansett hvilken IP-adresse maskinen brukes.

Navnbaserte VirtualHosts lar flere nettsteder dele samme IP-adresse og port. Apache velger så den tilsvarende VirtualHost basert på ServerName eller ServerAlias som er sendt med i HTTP-rekviringen.

ServerName

ServerName mon-projet.local

Dette er navnet vi vil bruke i nettleseren:

Text
http://mon-projet.local

Det anbefales å angi en eksplisitt ServerName for hvert VirtualHost.

DocumentRoot

DocumentRoot /var/www/mon-projet

Denne direktiven viser Apache hvor filene til nettsiden ligger.

<Directory>

<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Require all granted lar Apache servere innholdet i dette mappa.

AllowOverride All gjør det blant annet mulig for en .htaccess-fil til å endre noen av Apaches regler.

Hvis din applikasjon ikke bruker .htaccess, kan du bruke:

AllowOverride None

Dette valget er ofte foretrukket når applikasjonen ikke trenger det, fordi Apache-konfigurasjonen blir da merentralisert.

Loggene

ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined

Feilene vil bli registrert i:

Text
/var/log/apache2/mon-projet-error.log

og tilgangene i:

Text
/var/log/apache2/mon-projet-access.log

4. Legg til domenet i /etc/hosts


Domenet mon-projet.local finnes ikke på Internett.

Derfor må vi si til maskinen at dette navnet skal korresponderes med 127.0.0.1.

Endre filen /etc/hosts:

Bash
sudo nano /etc/hosts

Legg til:

Text
127.0.0.1 mon-projet.local

Du kan også bruke:

Text
127.0.0.1 mon-projet.local www.mon-projet.local

dersom du vil bruke begge navnene.

Filen /etc/hosts lar oss dermed simulere en DNS-oppløsning lokalt. Apache oppretter ikke automatisk DNS-oppføringer for de virtuelle hostene.

Hvis du bruker et annet datamaskin til å komme til Debian-serveren, må denne endringen gjøres på klientmaskinen, eller erstattes med en virkelig DNS-konfigurasjon.

5. Aktiver VirtualHost-en


Filen vi nettopp opprettet ligger i:

Text
/etc/apache2/sites-available/

Dette betyr at den er tilgjengelig, men ikke aktivert ennå.

Aktiver det med:

Bash
sudo a2ensite mon-projet.conf

Du kan muligens deaktivere standard VirtualHost-en for Apache:

Bash
sudo a2dissite 000-default.conf

Dette er imidlertid ikke nødvendig for å få vår nye VirtualHost til å fungere.

6. Sjekk Apache-konfigurasjonen


Før du laster om Apache, sjekker du alltid konfigurasjonen:

Bash
sudo apachectl configtest

Hvis alt er riktig, bør du få:

Text
Syntax OK

Dette er en viktig steg: den hindrer deg fra å laste om en konfigurasjon som inneholder syntaksfeil.

Du kan så laste om Apache:

Bash
sudo systemctl reload apache2

Et reload er tilstrekkelig her: det lar Apache ta i betraktning av den nye konfigurasjonen uten å fullstendig stoppe tjenesten.

7. Sjekk de aktive VirtualHostene

Apache gir deg en veldig nyttig kommando for å undersøke de konfigurerte VirtualHostene:

Bash
sudo apachectl -S

Du bør se en linje som svarer til:

Text
*:80 mon-projet.local

Denne kommandoen er spesielt nyttig når en maskin hoster flere prosjekter og man ønsker å forstå hvilken VirtualHost Apache bruker. Dokumentasjonen for Apache anbefaler faktisk apachectl -S for å diagnostisere konfigurasjonen av VirtualHostene.

8. Test nettsiden


Du kan nå åpne nettleseren og skrive inn:

Text
http://mon-projet.local

Du bør se:

Text
Mon projet fonctionne !
PHP fungerer med Apache.

Hvis du foretrekker å utføre testen fra terminalen:

Bash
curl http://mon-projet.local

Du bør få den HTML-innhald som er generert av PHP.

Du kan også sjekke direkte at PHP kjøres av Apache ved å opprette et tempoarært fil:

Bash
sudo nano /var/www/mon-projet/info.php

med:

PHP
<?php
phpinfo();

Så åpner du:

Text
http://mon-projet.local/info.php

Du bør se PHP-informasjonssiden.

Fjern så denne fila, fordi phpinfo() gir ut mange informasjon om PHP-miljøet:

Bash
sudo rm /var/www/mon-projet/info.php

9. Aktiver mod_rewrite hvis nødvendig


Mange moderne PHP-applikasjoner bruker modulen rewrite for Apache.

Du kan aktivere det med:

Bash
sudo a2enmod rewrite

Deretter sjekk konfigurasjonen:

Bash
sudo apachectl configtest

og last opp igjen Apache:

Bash
sudo systemctl reload apache2

Med:

AllowOverride All

til å legge til i VirtualHost, vil en applikasjon som bruker en .htaccess-fil kunne definere sine egne skriveomstillingsregler.

10. Legg til flere prosjekter


Virkeligheten med VirtualHosts viser seg spesielt når flere prosjekter er installert på samme maskin.

For eksempel:

Text
/var/www/site1
/var/www/site2
/var/www/site3

Du kan lage:

Text
/etc/apache2/sites-available/site1.conf
/etc/apache2/sites-available/site2.conf
/etc/apache2/sites-available/site3.conf

site1.conf

<VirtualHost *:80>
ServerName site1.local
DocumentRoot /var/www/site1
<Directory /var/www/site1>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site1-error.log
CustomLog ${APACHE_LOG_DIR}/site1-access.log combined
</VirtualHost>

site2.conf

<VirtualHost *:80>
ServerName site2.local
DocumentRoot /var/www/site2
<Directory /var/www/site2>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site2-error.log
CustomLog ${APACHE_LOG_DIR}/site2-access.log combined
</VirtualHost>

Deretter legg til navnene i /etc/hosts:

Text
127.0.0.1 site1.local
127.0.0.1 site2.local

Aktiver de to prosjektene:

Bash
sudo a2ensite site1.conf
sudo a2ensite site2.conf

Sjekk konfigurasjonen:

Bash
sudo apachectl configtest

Deretter last opp igjen Apache:

Bash
sudo systemctl reload apache2

Du kan nå tilgå de to applikasjonene med:

Text
http://site1.local
http://site2.local

11. Bruk ServerAlias


Hvis en applikasjon skal være tilgjengelig med flere navn, bruker du ServerAlias.

For eksempel:

<VirtualHost *:80>
ServerName mon-projet.local
ServerAlias www.mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

Du kan dermed bruke:

Text
http://mon-projet.local

eller:

Text
http://www.mon-projet.local

Legg også til de to navnene i /etc/hosts:

Text
127.0.0.1 mon-projet.local www.mon-projet.local

Apache bruker ServerName og ServerAlias for å bestemme hvilken VirtualHost skal svare på en gitt forespørsel.

12. Skal du bruke NameVirtualHost?


Med eldre versjoner av Apache kunne man møte en rettferdighet som dette:

NameVirtualHost *:80

Den er ikke nødvendig med Apache 2.4.

En moderne konfigurasjon under Debian 13 behøver bare:

<VirtualHost *:80>
ServerName mon-projet.local
...
</VirtualHost>

Apache 2.4 håndterer naturligvis VirtualHosts basert på navn.

Det er derfor ubehagelig å legge til NameVirtualHost *:80 i en ny konfigurasjon.

13.Struktur slutten


På dette stadiet ser vår installasjon slik ut:

Text
/var/www/
└── mon-projet/
└── index.php
/etc/apache2/
├── sites-available/
│ └── mon-projet.conf
└── sites-enabled/
└── mon-projet.conf -> ../sites-available/mon-projet.conf

Og /etc/hosts inneholder:

Text
127.0.0.1 mon-projet.local

VirtualHost-innholdet er:

<VirtualHost *:80>
ServerName mon-projet.local
DocumentRoot /var/www/mon-projet
<Directory /var/www/mon-projet>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/mon-projet-error.log
CustomLog ${APACHE_LOG_DIR}/mon-projet-access.log combined
</VirtualHost>

Avslutning


Å sette opp en VirtualHost for Apache for et PHP-prosjekt på Debian 13 er relativt enkelt.

De viktigste kommandoene er:

Bash
sudo apt update
sudo apt install apache2 php libapache2-mod-php

Deretter:

Bash
sudo mkdir -p /var/www/mon-projet
sudo nano /etc/apache2/sites-available/mon-projet.conf

Legg til domenet i:

Bash
sudo nano /etc/hosts

Deretter aktiver og sjekk om nettsiden fungerer:

Bash
sudo a2ensite mon-projet.conf
sudo apachectl configtest
sudo systemctl reload apache2

Sist:

Bash
sudo apachectl -S

denne kommandoen lar deg verifisere hvilke VirtualHosts som faktisk blir brukt av Apache.

Du kan deretter tilgang til prosjektet ditt med:

Text
http://mon-projet.local

Denne metoden lar deg lokalt gjøre en organisasjon nær den virkelige webserveren, mens du samtidig kan hoste flere uavhengige PHP-prosjekter på én Debian 13-maskin.

Du liker kanskje også:

Kommentarer

Ingen godkjente kommentarer ennå.

Logg inn med en kommentatorkonto for å publisere en kommentar. Logg inn.