Apache-Tutorial: Webseite erstellen
Dieses kurze Tutorial zeigt, wie Du im Apache HTTPd eine neue Webseite einrichtest. Als Serversystem wird ein Debian-Derivat wie z.B. Raspberry Pi OS ( a.k.a. Raspbian) verwendet.
Neben einer Subdomain (die einfachste Variante) zeige ich Dir auch, wie du die „Hauptseite“ unter der Second-Level-Domain, inkl. Weiterleitung von der www.
-Subdomain, erstellst (no-www Class B).
Folgendes wird vorausgesetzt:
- Die Domain der Seite kann via DNS aufgelöst werden. Im folgenden sind dies die Domains
example.com
,www.example.com
&foo.example.com
.www.example.com
ist idealerweise ein CNAME-Record, der aufexample.com
zeigt.
- Die Wurzelverzeihnisse der Webseiten (bei Apache DocumentRoot genannt) liegen unter
/srv/http/<webseite>
. - Die Pakete
apache2
undcertbot
sind installiert.
DNS-Auflösung testen und DocumentRoot erstellen
Die DNS-Auflösung lässt sich mit dem Programm host
testen:
host example.com
host www.example.com
host foo.example.com
Nun wird der DocumentRoot-Ordner erstellt, das Wurzelverzeichnis der Webseite; mit einer minimalen index.html
-Datei. Außerdem ändern wir die Gruppe in www-data, damit für PHP-Skripte der Schreibzugriff durch ein chmod g+w
gewährt werden kann, statt durch ein viel zu unsicheres chmod 777
:
sudo mkdir -p /srv/http/foo.example.com /srv/http/example.com
sudo chown -R $USER:www-data \
/srv/http/foo.example.com /srv/http/example.com
echo '<h1>foo.example.com</h1>' > /srv/http/foo.example.com/index.html
echo '<h1>example.com</h1>' > /srv/http/example.com/index.html
Apache VHost-Config für foo.example.com
Nun wird die Apache-Konfigurationsdatei /etc/apache2/sites-available/foo.example.com.conf
erstellt:
<VirtualHost *:80>
ServerName foo.example.com
ServerAdmin webmaster@example.com
DocumentRoot /srv/http/foo.example.com
# Eigene Logfiles
ErrorLog ${APACHE_LOG_DIR}/foo.example.com_error.log
CustomLog ${APACHE_LOG_DIR}/foo.example.com_access.log combined
<Directory /srv/http/foo.example.com>
Require all granted
AllowOverride All
Options +Indexes +SymLinksIfOwnerMatch
</Directory>
</VirtualHost>
Ein kurzer Überblick über die hier vorgenommenen Einstellungen:
ServerName
,ServerAdmin
undDocumentRoot
erklären sich von selbst- Eigene Log-Dateien für den VHost.
CustomLog
erstellt ein dabei die access_log. - Ein
Require all granted
innerhalb einer<Directory>
-Direktive erlaubt den Zugriff auf denDocumentRoot
, ansonsten würde der Server nur mit einem 403-Fehler antworten AllowOverride All
erlaubt alle Direktiven und Einstellungen innerhalb von.htaccess
-Dateien. Sollte aus Sicherheitsgründen nicht verwendet werden, wenn Dritte Dateien imDocumentRoot
ändern können.- Die Option Indexes aktiviert Verzeichnis-Listings, falls keine index-Datei vorhanden ist. Im Produktiv-Betrieb und falls ein CMS o.ä. eingesetzt wird, sollte die Option evtl. deaktiviert werden (durch angabe von -Indexes).
- Die Option SymLinksIfOwnerMatch folgt symbolischen Links, falls das Ziel dem gleichen Benutzer gehört. So kann nicht auf System-Verzeichnisse oder VHosts von anderen Nutzern verlinkt werden.
Aktiviert wird die Seite mit:
sudo a2ensite foo.example.com
sudo systemctl reload apache2
Dabei wird ein symbolischer Link in /etc/apache2/sites-enabled
erstellt und Apache angewiesen die Konfiguration neu einzulesen.
Jetzt sollte die Seite unter http://foo.example.com erreichbar sein.
Ein VHost für mehrere Domains: example.com
& www.example.com
Um die Second-Level-Domain inkl. www.
-Subdomain einzurichten, erstellen wir die Datei /etc/apache2/sites-available/example.com
, in der wir www.example.com
als ServerAlias angeben:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /srv/http/example.com
# Logfiles
ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
<Directory /srv/http/example.com>
Require all granted
AllowOverride All
Options +Indexes +SymLinksIfOwnerMatch
</Directory>
# Weiterleitung www.example.com -> example.com
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ %{REQUEST_SCHEME}://example.com$1 [R=301,L]
</IfModule>
</VirtualHost>
Mithilfe des Apache-Moduls mod_rewrite wird hierbei von www.example.com
permanent zu example.com
umgeleitet. Anmerkung: Doppelter Content ohne Umleitung kann von Google mit einer Herabstufung im Index bestraft werden, deshalb sollten diese Rewrite-Regeln immer verwendet werden.
Nachdem das Modul aktiviert wurde, kann die Seite aktiviert werden. Da ein Modul aktiviert wurde, muss der Apache-Daemon komplett neu gestartet werden:
sudo a2enmod rewrite
sudo a2ensite example.com
sudo systemctl restart apache2
SSL-Zertifikat via Let’s Encrypt
Mithilfe von certbot beantragen wir nun ein SSL-Zertifikat von Let’s Encrypt:
sudo certbot --apache -d foo.example.com
Dabei fragt certbot, ob wir eine automatische Umleitung auf HTTPS wollen, welchem wir zustimmen.
Die neue Apache Konfigurationsdatei /etc/apache2/sites-available/foo.example.com-le-ssl.conf
wurde dabei erstellt und direkt aktiviert.
Für example.com
müssen wir im SSL-Zertifikat zusätzlich die www.
-Subdomain eintragen. Dafür kann bei Certbot die Option -d
wiederholt werden. Die erste Nennung wird dabei als commonName im Zertifikat hinterlegt, alle weiteren als subjectAlternateNames:
sudo certbot --apache -d example.com -d www.example.com
Um die neuen SSL-VHosts zu aktivieren, muss mod_ssl aktiviert werden und der Webserver neu geladen werden:
sudo a2enmod ssl
sudo systemctl reload apache2