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.comist idealerweise ein CNAME-Record, der aufexample.comzeigt.
- Die Wurzelverzeihnisse der Webseiten (bei Apache DocumentRoot genannt) liegen unter
/srv/http/<webseite>. - Die Pakete
apache2undcertbotsind 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,ServerAdminundDocumentRooterklären sich von selbst- Eigene Log-Dateien für den VHost.
CustomLogerstellt ein dabei die access_log. - Ein
Require all grantedinnerhalb einer<Directory>-Direktive erlaubt den Zugriff auf denDocumentRoot, ansonsten würde der Server nur mit einem 403-Fehler antworten AllowOverride Allerlaubt 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