Virtuele servers onder Apache

Virtuele servers onder Apache

Probleem:

ik heb op een linux-systeem Apache draaien. De site kan ik benaderen via http://localhost.
Het systeem heeft als naam penguin, volledig: penguin.thuis.

Ik wil echter nog twee virtuele webservers draaien die te benaderen zijn via

  • http://mijnsite.thuis en http://www.mijnsite.thuis
  • http://zomaar.thuis en http://www.zomaar.thuis

Dit verhaal slaat op Apache 1.3 maar is met wat verstand ook voor Apache 2.x te gebruiken. De basis is het zelfde gebleven. Ik zal het verhaal eens aanpassen voor Apache 2.

Het spreekt vanzelf dat dit alles onder root moet!

Stap 1: bekend maken van de namen

Allereerst moeten de namen bekend gemaakt worden. De namen moeten resolven naar het zelfde IP-adres.
Als je DNS draait moet je het daarin aanpassen. Als je geen DNS draait moet het in /etc/hosts

Daarin zal tijdens de installatie wel al een regel als

172.16.1.1  penguin.thuis penguin
opgenomen zijn.

Wijzig deze regel in

172.16.1.1  penguin.thuis penguin mijnsite.thuis www.mijnsite.thuis zomaar.thuis www.zomaar.thuis
(Alles op 1 regel!)

Let op: bij SuSE (en wellicht ook andere distributies) wordt /etc/hosts na iedere installatie van software 'aangepast'. Schakel dit uit!

bij SuSE 8.1 gaat dat het beste via Yast2. Onder System vind je Editor for /etc/sysconfig.

Het gaat om de variabelen BEAUTIFY_ETC_HOSTS en CHECK_ETC_HOSTS. Deze moeten beiden op 'no' staan.

Test of alles goed is via

ping www.mijnsite.thuis

Stap 2: Aanpassen configuratiefile Apache

Bij SuSE is dit /etc/httpd/httpd.conf

Maak allereerst een veiligheid-kopie!!

De file is ruim voorzien van commentaar.

Een aantal zaken zullen er al via de installatie in staan. Sommige dingen moet je uit-commenten (zoals dat in goed nederlands heet).

Ik illustreer het verhaal aan de hand van een httpd.conf
Ik geef alleen de relevante delen weer.
De meeste zaken zullen er al in staan. Waarschijnlijk hoef je alleen de blokken voor VirtualHost's moeten aanpassen cq toevoegen.

ServerRoot "/srv/www"
Dit vertelt Apache waar alles van je standaard-server zich bevindt
User wwwrun
Group nogroup
Apache zal gaan draaien onder wwwrun.nogroup. Zorg er voor dat alle directories en files van deze user zijn!
ServerAdmin webmaster@penguin.thuis
Hier gaan mailtjes naar toe.
ServerName penguin.thuis
De naam van de server.
DocumentRoot "/srv/www/htdocs"
Als ik iets opvraag via http://penguin.thuis/MijnDocument.html zal Apache in deze directory zoeken.
ErrorLog /var/log/httpd/error_log
Vertelt Apache waar het errorlog neergezet moet worden.
CustomLog /var/log/httpd/access_log common
Vertelt Apache waar het accesslog neergezet moet worden plus het formaat.
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
Vertelt Apache waar scripts zich bevinden. Als ik een script start via http://penguin.thuis/cgi-bin/MijnScript.pl moet dat in deze directory staan.
NameVirtualHost *
Vertelt Apache dat in name based virtual servers wil hebben. Het alternatief is virtuele servers gebaseerd op verschillende IP-adressen.

We krijgen nu een aantal VirtualHost blokken die de verschillende virtuele servers bepalen. De eerste wordt gebruikt voor de standaard server en als er geen andere virtuele server gevonden kan worden.

<VirtualHost *>
ServerAdmin webmaster@penguin.thuis
DocumentRoot /srv/www/htdocs
ServerName penguin.thuis
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common
ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
</VirtualHost>

Deze zaken stonden ook al in de algemene sectie maar ik heb ze er voor de volledigheid in gezet.

Vervolgens maken we het blok voor mijnsite.thuis.

<VirtualHost *>
ServerAdmin webmaster@penguin.thuis
DocumentRoot /srv/mijnsite/www
ServerName mijnsite.thuis
ServerAlias www.mijnsite.thuis
ErrorLog /srv/mijnsite/logs/error_log
CustomLog /srv/mijnsite/logs/access_log common
ScriptAlias /cgi-bin/ "/srv/mijnsite/www/cgi-bin/"
</VirtualHost>

Het enige nieuwe is ServerAlias. Dit geeft een tweede, derde naam etc. waaronder deze virtuele server ook te benaderen is.

index.html voor deze server moet dus in /srv/mijnsite/www/ staan. Scripts in /src/mijnsite/www/cgi-bin.

Tenslotte nog het blok voor zomaar.thuis:

<VirtualHost *>
ServerAdmin webmaster@penguin.thuis
DocumentRoot /home/zomaar/htdocs
ScriptAlias /cgi-bin/ "/home/zomaar/cgi-bin/"
ServerName zomaar.thuis
ServerAlias www.zomaar.thuis
ErrorLog /home/zomaar/logs/error_log
CustomLog /home/zomaar/logs/access_log common
</VirtualHost>

Stap 3: Herstarten Apache

Tenslotte moet Apache opnieuw gestart worden. Onder SuSE gaat dat via
rcapache restart
Let op foutmeldingen!