Debian server beheer

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>