Een virtuele website toevoegen in Apache
Apache kan in principe een onbeperkt aantal websites tonen vanaf één server. Je moet Apache dan wel vertellen dat die sites bestaan. Maak eerst de mappen waar de bestanden in komen. Ik heb de gewoonte om die alvolgt te noemen (waarbij in dit voorbeeld debian de gebruikersnaam is):
mkdir /home/debian mkdir /home/debian/public_html mkdir /home/debian/logs mkdir /home/debian/logs/apache2
Overigens kun je de mappen elke willekeurige naam geven en op elke willekeurige plek zetten als je dat maar aan Apache vertelt (zie verderop). Als je een andere gebruiker via (S)FTP toegang wilt geven tot deze mappen pas dan de eigenaar aan:
chown -R nieuwe-eigenaar /home/debian
Maak vervolgens de configuratie voor de site aan
nano /etc/apache2/sites-available/debian.weijers.net
Ik sla de configuratie op in een bestand met de naam debian.weijers.net. Ook hier geldt dat je elke willekeurige naam kunt kiezen maar het is handig om met jezelf een of andere conventie af te spreken. Dan weet je later altijd waar je je bestanden zoeken moet. In de configuratie kun je veel of weinig kwijt. Dit is ongeveer het minimum:
<VirtualHost *:80> ServerName debian.weijers.net DocumentRoot /home/debian/public_html ServerAdmin jij@ergens.nl ErrorLog /home/debian/logs/apache2/error.log CustomLog /home/debian/logs/apache2/access.log common </VirtualHost>
Alles wat je in dit bestand niet configureert krijgt de default instellingen van Apache. En je kunt dus alle instellingen per site aanpassen door ze in dit bestand te zetten. Zoals gewoonlijk sla je het bestand op met control+o en sluit nano af met control+x. Tenslotte zijn nog twee opdrachten aan Apache nodig om de nieuwe configuratie in te laden:
a2ensite debian.weijers.net
Apache antwoordt dan met:
Enabling site debian.weijers.net Run '/etc/init.d/apache2 reload' to activate new configuration!
En dat doe je dan ook:
/etc/init.d/apache2 reload
Virtuele sites als eigen gebruiker draaien
Alle virtuele sites draaien als dezelfde gebruiker, meestal www-data. In principe is dit een veiligheidsrisico. Als de ene site een kwaadaardig script bevat, kan dit bestanden van de andere virtuele sites benaderen. Daarom is het beter elke virtuele site als eigen gebruiker te laten draaien. Daarvoor hebben we mpm-itk nodig. Controleer eerst of dit geïnstalleerd is:
/usr/sbin/apachectl -l
De uitvoer is zoiets als dit:
Compiled in modules: core.c mod_log_config.c mod_logio.c itk.c http_core.c mod_so.c
Als je itk.c
ziet is mpm-itk geïnstalleerd. Zo niet, installeer het dan met de volgende opdracht:
apt-get install apache2-mpm-itk (in Debian 9: apt-get install libapache2-mpm-itk)
De module wordt nu geïnstalleerd. Om een website onder de eigen gebruiker te draaien open je het configuratiebestand en voeg je de volgende regel toe:
AssignUserId [gebruiker] [groep]
Het is belangrijk dat je de eigenaar en groep op de bestanden die bij de website horen goed instelt. Elke virtuele site kan dan alleen bij de eigen bestanden en dat maakt je server een stuk veiliger.
Website per gebruiker
Apache biedt de mogelijkheid om een website per gebruiker te tonen, zelfs op ip-adres: http://10.11.12.13/~gebruikersnaam. Dit kan bijvoorbeeld handig zijn om sites te testen voordat je de DNS aanpast. Maak een map voor de documenten en geef die de juiste rechten:
mkdir /home/gebruiker/public_html chown gebruiker:gebruiker /home/gebruiker/public_html
Vervolgens moet je de juiste module in Apache activeren:
a2enmod userdir
Open de configuratie van deze module:
nano /etc/apache2/mods-enabled/userdir.conf
Dat bestand moet er zo uit zien:
<IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride All Options MultiViews Indexes SymLinksIfOwnerMatch <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> </IfModule>
In de meeste gevallen hoef je er niets aan te doen. Als je ook het gebruik van php toe wilt staan in die sites moet je de configuratie aanpassen:
nano /etc/apache2/mods-available/php5.conf
De laatste regel (php_admin_value engine Off) daarvan moet uitgeschakeld worden door er een commentaarteken # voor te zetten. in het bestand zelf staat duidelijk uitgelegd waar dat moet.
Bezoeker doorsturen met Redirect
Soms verhuis je mappen op je server of krijgen ze een andere naam en dan wil je op een makkelijke manier bezoekers door kunnen sturen. Dit kan door een Redirect in de configuratie van je virtual host te zetten.
nano /etc/apache2/sites-available/debian.weijers.net
En voeg vervolgens toe:
Redirect /de-ene-map /de-andere-map
Vervolgens moet je Apache herstarten:
/etc/init.d/apache2 reload
Bezoekers die de-ene-map opvragen worden nu doorgestuurd naar de-andere-map. Ook de rest van de url wordt doorgegeven, dus /de-ene-map/submap/index.php?id=10 wordt doorgestuurd naar /de-andere-map /submap/index.php?id=10
Je kunt ook van een map doorverwijzen naar een andere site. Gebruik daarvoor:
Redirect /de-ene-map http://www.de-andere-site.nl
Redirect is ook handig om gebruikers altijd naar een beveiligde site te verwijzen. Je hebt daarvoor dit nodig:
<VirtualHost *:80> ServerName www.voorbeeld.nl Redirect permanent / https://www.voorbeeld.nl/ </VirtualHost> <VirtualHost *:443> ServerName www.voorbeeld.nl DocumentRoot /usr/local/apache2/htdocs SSLEngine On # etc... </VirtualHost>