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.localhttp://blog.localhttp://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:
sudo apt update |
sudo apt upgrade |
Installer derefter Apache og PHP:
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:
apache2 -v |
php -v |
Du bør få noe som ligner på:
Server version: Apache/2.4.68 |
og:
PHP 8.4.x |
De eksakte revisjonsnummer kan selvfølgelig endre seg med sikkerhetsoppdateringer av Debian.
Sjekk også at Apache-tjenesten fungerer:
sudo systemctl status apache2 |
Hvis nødvendig:
sudo systemctl enable --now apache2 |
2. Lag prosjektmappe
Vi vil plassere vårt prosjekt her:
/var/www/mon-projet |
Lag mappe:
sudo mkdir -p /var/www/mon-projet |
For å teste konfigurasjonen raskt, lager vi en PHP-fil:
sudo nano /var/www/mon-projet/index.php |
Legg til:
<?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:
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:
/etc/apache2/sites-available/ |
Lag fila:
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:
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:
/var/log/apache2/mon-projet-error.log |
og tilgangene i:
/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:
sudo nano /etc/hosts |
Legg til:
127.0.0.1 mon-projet.local |
Du kan også bruke:
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:
/etc/apache2/sites-available/ |
Dette betyr at den er tilgjengelig, men ikke aktivert ennå.
Aktiver det med:
sudo a2ensite mon-projet.conf |
Du kan muligens deaktivere standard VirtualHost-en for Apache:
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:
sudo apachectl configtest |
Hvis alt er riktig, bør du få:
Syntax OK |
Dette er en viktig steg: den hindrer deg fra å laste om en konfigurasjon som inneholder syntaksfeil.
Du kan så laste om Apache:
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:
sudo apachectl -S |
Du bør se en linje som svarer til:
*: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:
http://mon-projet.local |
Du bør se:
Mon projet fonctionne ! |
PHP fungerer med Apache. |
Hvis du foretrekker å utføre testen fra terminalen:
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:
sudo nano /var/www/mon-projet/info.php |
med:
<?php |
|
phpinfo(); |
Så åpner du:
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:
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:
sudo a2enmod rewrite |
Deretter sjekk konfigurasjonen:
sudo apachectl configtest |
og last opp igjen Apache:
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:
/var/www/site1 |
/var/www/site2 |
/var/www/site3 |
Du kan lage:
/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:
127.0.0.1 site1.local |
127.0.0.1 site2.local |
Aktiver de to prosjektene:
sudo a2ensite site1.conf |
sudo a2ensite site2.conf |
Sjekk konfigurasjonen:
sudo apachectl configtest |
Deretter last opp igjen Apache:
sudo systemctl reload apache2 |
Du kan nå tilgå de to applikasjonene med:
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:
http://mon-projet.local |
eller:
http://www.mon-projet.local |
Legg også til de to navnene i /etc/hosts:
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:
/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:
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:
sudo apt update |
sudo apt install apache2 php libapache2-mod-php |
Deretter:
sudo mkdir -p /var/www/mon-projet |
sudo nano /etc/apache2/sites-available/mon-projet.conf |
Legg til domenet i:
sudo nano /etc/hosts |
Deretter aktiver og sjekk om nettsiden fungerer:
sudo a2ensite mon-projet.conf |
sudo apachectl configtest |
sudo systemctl reload apache2 |
Sist:
sudo apachectl -S |
denne kommandoen lar deg verifisere hvilke VirtualHosts som faktisk blir brukt av Apache.
Du kan deretter tilgang til prosjektet ditt med:
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.
Kommentarer
Ingen godkjente kommentarer ennå.
Logg inn med en kommentatorkonto for å publisere en kommentar. Logg inn.