Inhaltsverzeichnis
Apache Webserver
In dieser Anleitung wird auf erweiterte Konfigurationsmöglichkeiten des Apache2 Webservers wie V-Hosts, Aliase und SSL eingegangen. Als Basis für jetzt folgende Konfigurationsmöglichkeiten wird vorausgesetzt, dass die Anleitung LAMP - Webserver mit mySQL und PHP auf dem Server erfolgreich umgesetzt wurde. Natürlich ist PHP oder mySQL nicht zwingend notwendig, aber zumindest der Apache Webserver sollte funktionieren.
Softwarevoraussetzungen: bereits installierter Apache (siehe LAMP) | Texteditor
Schwierigkeitsgrad: Mittel
Ausgetestet mit folgenden Betriebssystemen: Ubuntu | Debian | teilweise auch andere Distributionen
Archiv: Diese Anleitung behandelt ältere Softwareversionen, kann aber noch als Referenz verwendet werden.m
V-Host - Konfiguration
Vhost ermöglichen es, dass der Webserver abhängig von der Domain, über die er erreicht wird andere Webseiten zu zeigen.
Beispiel: der Webserver hört auf die IP 87.134.213.6
, auf diese Domain sind zwei Domains eingetragen, wenn nun der Server unter Domain1
erreicht wird gibt er eine andere Seite aus, als wenn er über Domain2
erreicht wird.
Ebenfalls gibt es noch Aliase, die es ermöglichen Dateien/Verzeichnisse außerhalb des Webserverroots einzubinden.
Vhosts
Verfügbare Vhosts liegen in /etc/apache2/sites-available/
, aktivierte in /etc/apache2/sites-enabled/
. Normalerweise legt man einen neuen Vhost immer in /etc/apache2/sites-available/
an und aktiviert ihn dann mit dem Apache-Tool a2ensite
, deaktivieren kann man ihn dann wieder mit a2dissite
:
user@server:~$ sudo a2ensite vhost # aktiviert den Vhost user@server:~$ sudo a2dissite vhost # deaktiviert den Vhost user@server:~$ sudo a2dissite 000-vhost # Achtung: beim Defaulthost setzt Apache ein "000-" davor
Also legt man in /etc/apache2/sites-available/
ein neue Datei mit dem Vhostnamen an. Standardmäßig liegt bereits der Vhost default
vor, dieser ist bereits aktiviert. Natürlich kann man auch mehrere Vhost in einer Datei definieren.
Beispiel
Unser Server hat den Vhost default
, diesen Inhalt sieht folgender maßen aus:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Aufbau eines Vhosts
Interessant ist in unserem Fall als erstes der Vhost Bereich:
<VirtualHost *:80> # *=alle Interfaces :80=Port 80 </VirtualHost>
Angenommen der Vhost sollte nur über ein Interface mit der IP 192.168.2.1
erreichbar sein und auf Port 81
lauschen, dann müsste der Vhost Bereich wie folgt aussehen:
<VirtualHost 192.168.2.1:81> </VirtualHost>
Um auf anderen Ports zu lauschen muss in /etc/apache2/ports.conf
noch in folgender Art der Port und die IP hinzugefügt werden:
NameVirtualHost IP/*:PORT Listen PORT
Also mit Port 81:
NameVirtualHost 192.168.2.1:81 Listen 81
Danach folgen wichtige Anweisung, wir nennen diese einfach einmal Header:
ServerAdmin serveradmin@domain.de # E-Mail des Serveradmins ServerName domain.de # Für diese Domain ist der Vhost primär zuständig, hier kann auch eine IP eingetragen werden ServerAlias www.domain.de # Weitere Domains (Aliase), für die der Vhost gelten soll DocumentRoot /var/www # Webserverroot (wo liegt die Webseite, die auf dem Vhost läuft im Dateisystem)
anschließend folgen wichtige Anweisungen und Direktiven, die man aus dem default
Host entnimmt und anpasst:
<Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> # /var/www/ durch Webserverrot ersetzen () Options Indexes FollowSymLinks MultiViews # bei Bedarf anpassen (siehe Apache Webseite) AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ #Scriptalias <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Errorlog (kann auch angepasst werden) # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn # Loglevel (auch anpassen) CustomLog /var/log/apache2/access.log combined # Alle Anfragen werden hier protokolliert Alias /doc/ "/usr/share/doc/" # Dokumentation (nur von localhost erreichbar) <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory>
Wichtig ist, dass der ganze Vhost diesem Aufbau folgt:
<VirtualHost *:80> #"Header" (Erklärung siehe oben) ServerAdmin ServerName ServerAlias DocumentRoot #..und nun die Direktiven (von oben übernehmen) </VirtualHost>
Vhost aktivieren und Apache neustarten
Hinweis: falls der Vhost in einer bereits aktivierten Vhost Datei eingefügt wurde, muss man ihn nicht mehr akivieren, da dieser Schritt lediglich Apache sagt, dass es eine neue Vhost Datei gibt! Ein Neustart/Reload des Apaches ist trotzdem zwingend notwendig!
Nun, wenn man den Vhost angelegt hat, aktiviert man diesen:
user@server:~$ sudo a2ensite VHOST # VHOST durch den Dateinamen der Vhost Datein in /etc/apache2/sites-available/ ersetzen
und startet Apache neu:
user@server:~$ sudo service apache2 restart
aus eventuellen Fehlermeldungen kann man nun den Grund entnehmen.
Hinweis:
- Sollte der Webserver über einen nicht definierten Vhost angesprochen werden, wird er den ersten Vhost nehmen (nach dem Alphabet)
- Bei Änderungen an den Konfigurationsdateien genügt auch ein
reload
(stattrestart
)
Aliase
Aliase ermöglichen es Verzeichnisse, die nicht im Webserverroot sind einzubinden, bzw. im Webserverroot vorhandene Verzeichnisse unter anderen URLs erreichbar zu machen.
Dabei muss man sich den Alias wie einen Link von dem Verzeichnis, das einzubinden ist in das Webserveroot vorstellen. Der Alias gibt dann an, wo der virtuelle Link im Webserverroot ist.
Aliase kommen zwischen den Vhost Bereich:
<VirtualHost IP/*:PORT> # hier hin </VirtualHost>
und definieren sich so:
Alias /einAlias "/Verzeichnis/im/Dateisystem/" <Directory "/Verzeichnis/im/Dateisystem/"> # zusätzliche Direktiven </Directory>
Hier wäre das Verzeichnis /Verzeichnis/im/Dateisystem/
unter http://server/einAlias
erreichbar
Beispiel für einen einfachen Alias:
Alias /meinewebsite "/home/user/website/" # "einAlias" wird durch <Directory "/home/user/website/"> Options Indexes FollowSymLinks MultiViews AllowOverride FileInfo Order allow,deny allow from all </Directory>
In diesem Fall wäre der Inhalt des Verzeichnisses /home/user/website
über http://server/meinewebsite
erreichbar
Weitere Möglichkeiten
Hier wurden nur ein kleiner Bruchteil aller möglichen Konfigurationsmöglichkeiten im Bereich eines Vhosts eingegangen, falls du mehr Infos benötigst besuche die offizielle Apache Dokumentationsseite.
SSL
Um den Apache mit SSl zu konfigurieren, empfehle ich die Anleitung auf Ubuntuusers.de: Klick mich
Allerdings liegt dort kein kompletter SSL Vhost vor, deshalb hier ein Beispiel:
<VirtualHost *:443> ServerAdmin ich@loaclhost # anpassen ServerName # Servername ServerAlias # Domains, IPs unter denen der Vhost erreichbar ist DocumentRoot /var/www # bei Bedarf anpassen SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options -Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> # Skripte ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> # log ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined # doku Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
Module
Für den Apache Webserver gibt es Erweiterungen. Diese werden mods
genannt.
Hier im Wiki ist der mod Webdav näher erläutert:
Natürlich gibt es zahlreiche mehr - am Besten kann man sich über diese informieren, wenn man in der Paketverwaltung (Synaptic) nach libapache2-mod
sucht und die Informationen zu den einzelnen Paketen durchliest.
Nach der Installation des Mods sollte man jenen noch aktivieren und Apache neustarten:
user@server:~$ sudo apt-get install libapache2-mod-modname # Installation eines Mods; "modname" durch den Namen des Mods ersetzten user@server:~$ sudo a2enmod modname # Aktivieren des Mods; "modname" durch den Namen des Mods ersetzten user@server:~$ sudo service apache2 restart # Apache neustarten
Beispiel: mod_rewrite
Der mod_rewrite ist standardmäßig bereist installiert und muss nur noch aktiviert werden:
user@server:~$ sudo a2enmod rewrite
Der Vhost muss wie folgt angepasst werden:
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All # das muss oftmals geändert werden Order allow,deny allow from all </Directory>
danach sollte Apache neugestartet werden:
user@server:~$ sudo service apache2 restart
Anschließend kann man im Webserverroot mit der Datei .htaccess
(muss im Webserverroot des Vhosts liegen) URLs umschreiben. Wie das geht erfährst du in der Apache Doku.
— chrisge 2018/05/26 01:40