Nachdem Apache installiert ist und ausgeführt wird, können Sie ihn so konfigurieren, dass er mehrere Domänen bedient, indem Sie virtuelle Hosts verwenden .
Layout erstellen
Dieses Beispiel verwendet zwei Domains:domain1.com und domain2.com.
-
Erstellen Sie in Ihrem Home-Verzeichnis einen public_html-Ordner:
cd ~ mkdir public_html
-
Erstellen Sie für jede Domain, die Sie hosten möchten, einen Ordner mit einem Standardsatz von Unterordnern. Die folgenden Befehle erstellen die Ordner public, private, log, cgi-bin und backup für domain1.com und domain2.com:
mkdir -p public_html/domain1.com/{public,private,log,cgi-bin,backup} mkdir -p public_html/domain2.com/{public,private,log,cgi-bin,backup}
index.html erstellen
Der Inhalt des öffentlichen Ordners liegt bei Ihnen, aber dieses Beispiel verwendet eine sehr einfache HTML-Datei, damit Sie die Arbeit des virtuellen Hosts überprüfen können.
-
Erstellen Sie für jede Domain eine index.html-Datei:
nano public_html/domain1.com/public/index.html
-
Fügen Sie der Datei index.html den folgenden Code hinzu:
<html> <head> <title>domain1.com</title> </head> <body> <h1>domain1.com</h1> </body> </html>
-
Wiederholen Sie den Vorgang, sodass Sie eine ähnliche Datei für domain2.com haben. Ersetzen Sie alle Instanzen von
domain1.com
mitdomain2.com
.
Virtuelle Hosts definieren
Jetzt haben Sie eine Grundstruktur für Ihre zwei Domains, Sie können zwei virtuelle Hosts definieren.
NameVirtualHost überprüfen
Bei virtuellen Hosts sorgt die NameVirtualHost-Einstellung oft für Verwirrung.
Jede Schnittstelle und jeder Port, auf dem Apache lauschen soll, benötigt eine NameVirtualHost-Direktive. Sie können die Direktive nur einmal pro Port definieren.
Im Apache-Layout für das Ubuntu-Betriebssystem gibt es eine Standard-NameVirtualHost-Anweisung in der ports.conf
Datei.
Führen Sie den folgenden Befehl aus, um den Inhalt von ports.conf
anzuzeigen :
cat /etc/apache2/ports.conf
Sie sollten die folgende Ausgabe erhalten (es sei denn, Sie haben die Datei zuvor geändert):
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# SSL name based virtual hosts are not yet supported, therefore no
# NameVirtualHost statement here
Listen 443
</IfModule>
Die Standardeinstellung NameVirtualHost erfüllt die aktuellen Anforderungen - Apache wendet namensbasierte Logik und Einstellungen für virtuelle Hosts auf HTTP-Anforderungen an, die an jeder verfügbaren Schnittstelle (*) an Port 80 gesendet werden.
Hinweis :Die Platzierung der standardmäßigen NameVirtualHost-Direktive in ‚ports.conf‘ ist neu im Apache-Layout des Ubuntu-Betriebssystems; vorherige Releases haben eine ähnliche Einstellung im Standard-vhost platziert.
Define benutzerdefinierte virtuelle Hosts
Jetzt können Sie Ihre eigenen virtuellen Hosts hinzufügen, damit Sie beginnen können, Ihre Domains zu bedienen.
Erstellen Sie die vhost-Datei für domain1:
sudo nano /etc/apache2/sites-available/domain1.com.conf
Der Inhalt sieht wie folgt aus:
# Place any notes or comments you have here
# It will make any customisation easier to understand in the weeks to come
# domain: domain1.com
# public: /home/demo/public_html/domain1.com/
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin [email protected]
ServerName domain1.com
ServerAlias www.domain1.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html
DocumentRoot /home/demo/public_html/domain1.com/public
# Custom log file locations
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
</VirtualHost>
Aktivieren Sie die Website
Aktivieren Sie die Site wie folgt:
sudo a2ensite domain1.com
Die Ausgabe des Befehls sieht wie folgt aus:
Site domain1.com installed; run /etc/init.d/apache2 reload to enable.
Führen Sie den empfohlenen Befehl aus:
sudo /etc/init.d/apache2 reload
Zur Website navigieren
Um die Domäne zu testen, ohne eine DNS-Zone und Einträge auf einigen Internet-Nameservern zu erstellen, können Sie die Datei „/etc/hosts“ auf Ihrem lokalen Computer so ändern, dass sie einige Einträge enthält, die „domain1.com“, „domain2.com“ und den Rest zuordnen an die öffentliche IP-Adresse des Demo-Cloud-Servers:
127.0.0.1 localhost
...
# entries related to the demo Cloud Server
123.45.67.890 domain1.com
123.45.67.890 www.domain1.com
123.45.67.890 domain2.com
...
Der Speicherort der Datei „hosts“ hängt davon ab, welches Betriebssystem auf Ihrem lokalen Computer geladen ist.
Hinweis :Einträge in der Datei „hosts“ müssen vor dem Testen und Verwenden von Live-DNS-Zonen und -Einträgen, die auf Internet-Nameservern erstellt wurden, entfernt werden. Wenn Sie sie nicht entfernen, kann dies zu Verwirrung Ihrerseits und zu ungenauen Tests neuer oder geänderter öffentlicher DNS-Einträge führen.
Wenn solche Änderungen zu Testzwecken vorgenommen werden, können Sie in einem Webbrowser auf Ihrem lokalen Computer zu Ihrer Website navigieren und der Inhalt der Datei public/index.html wird angezeigt.
Verwenden Sie den ServerAlias
Beachten Sie, dass Sie in der vhost-Datei einen ServerAlias festlegen. Wenn Sie das DNS richtig eingerichtet haben, können Sie auch diese Adresse verwenden.
Über das Erzwingen der einen oder anderen Adresse sprechen wir in einem späteren Artikel über Rewrite-Regeln.
Wiederholen Sie den Vorgang für die andere Domain
Um domain2.com zu erstellen und zu aktivieren, wiederholen Sie den Vorgang wie folgt:
-
Erstellen Sie die vhost-Datei:
sudo nano /etc/apache2/sites-available/domain2.com ... # Enter the details for domain2.com as per the example shown above
-
Aktivieren Sie die Site und starten Sie Apache neu:
sudo a2ensite domain2.com ... sudo /etc/init.d/apache2 reload
-
Navigieren Sie zur zweiten Domain:
https://domain2.com or https://www.domain2.com
Sie sollten die Indexdatei „domain2.com“ sehen.
Protokolldateien anzeigen
Wie in der vhosts-Datei definiert, hat jede Domain ihre eigenen Protokolldateien.
Listen Sie die Protokolle für Ihre Domains auf:
ls /var/log/apache2/error-mydomainname.com.log
Die Ausgabe ist genau wie erwartet:
access.log error.log
Standard-vhost-Datei
Obwohl Sie den standardmäßigen virtuellen Host geändert haben, haben Sie ihn beibehalten.
Wenn jemand die IP-Adresse des Cloud-Servers eingibt, wird ihm der Inhalt dieser Standard-vhosts-Datei angezeigt (wenn Sie keinen separaten vhost für die IP-Adresse eingerichtet haben).
Warum werden sie von dieser vhost-Datei bereitgestellt?
Apache durchsucht die aktivierten vhost-Dateien in alphabetischer Reihenfolge und wenn es keine für die angeforderte IP-Adresse oder den Domänennamen finden kann, bedient es die erste (alphabetisch).
Wenn Sie die Standard-vhost-Datei deaktiviert oder gelöscht hätten, würde der Inhalt von domain1.com angezeigt (alphabetisch vor domain2.com).
Dies sollten Sie bei der Planung Ihrer Websites berücksichtigen. Möchten Sie, dass eine bestimmte Domäne die Standarddomäne ist? Möchten Sie, dass die IP-Adresse einen völlig anderen Inhalt hat?
Legen Sie die E-Mail-Adresse des Administrators fest
Legen Sie die E-Mail-Adresse für den Serveradministrator fest. Diese Adresse wird verwendet, wenn Sie den Server so einrichten, dass er Sie kontaktiert, wenn Fehler auftreten. Sie wird auch in der Serversignatur angezeigt, wenn ihr Wert auf E-Mail gesetzt ist. (Siehe Abschnitt Apache-Fußzeilen definieren .
ServerAdmin [email protected]
Legen Sie den Domainnamen fest
Legen Sie den Domänennamen (ServerName) für den virtuellen Host fest. Sie können beliebig viele Aliase (ServerAlias) haben. Beispielsweise können Sie domain.com und domain.net auf denselben Inhalt verweisen lassen.
ServerName domain.com
ServerAlias www.domain.com
Hinweis :Dies ist keine Rewrite-Regel, aber die hier definierten Domains liefern denselben Inhalt (vorausgesetzt, Sie haben das DNS so eingestellt, dass es auf Ihre Cloud-Server-IP verweist).
Indexdatei definieren
Definieren Sie die Indexdatei (die Startseite, die angezeigt wird, wenn die Domainadresse eingegeben wird). Dies ist nützlich, wenn Sie möchten, dass der Benutzer zu einer alternativen Seite oder zu einer nicht standardmäßigen Startseite weitergeleitet wird.
DirectoryIndex index.html
Hinweis :Dies ist keine gute Methode zum Umleiten von Benutzern, da sie möglicherweise direkt zu einer nicht angegebenen Seite wie domain.com/index.php gehen, während der DirectoryIndex-Wert nur für Benutzer funktioniert, die domain.com aufrufen.
Den Dokumentenpfad definieren
Definieren Sie den Speicherort der öffentlichen Dateien der Domain. Verwenden Sie einen absoluten Pfadnamen.
DocumentRoot /home/demo/public_html/domain.com/public
Setzen Sie die Protokolldateien
Legen Sie die Protokollebenen und den Speicherort für die Protokolldateien der virtuellen Hosts fest.
LogLevel warn
ErrorLog /var/log/apache2/error-mydomainname.com.log
CustomLog /var/log/apache2/access-mydomainname.com.log combined
Fehlerdokumente definieren
Setzen Sie das ErrorDocument, das für alle Standard-Fehlermeldungen verwendet wird.
ErrorDocument 404 /errors/404.html
ErrorDocument 403 /errors/403.html
In diesem Beispiel gibt es einen „Fehler“-Ordner im öffentlichen Verzeichnis. Jedes Fehlerdokument wurde erstellt und im Fehlerordner abgelegt. Die angezeigten Pfade sind relativ zum zuvor definierten DocumentRoot-Ordner.
Wenn keine Fehlermeldungen definiert sind, generiert Apache seine eigenen Fehlerseiten. Benutzerdefinierte Fehlerseiten sind benutzerfreundlicher und können so weit oder so wenig wie gewünscht angepasst werden.
Apache-Fußzeilen definieren
Definieren Sie ServerSignature, um anzugeben, ob die Serverdetails in vom Server generierten Fehlerseiten oder Indexlisten angezeigt werden. Die Optionen sind Ein, Aus und E-Mail.
ServerSignature On
Der Detaillierungsgrad der Signatur wird über ServerTokens konfiguriert, die nicht in der Virtual Hosts-Datei festgelegt werden können. Für das Apachelayout des Ubuntu-Betriebssystems ist dies ordnungsgemäß in „/etc/apache2/conf.d/security“ festgelegt. Weitere Informationen finden Sie im Artikel Apache-Konfiguration Nr. 2 NEED LINK.
Wenn ServerSignature auf E-Mail eingestellt ist , wird die ServerAdmin-E-Mail angezeigt.
cgi-bin aktivieren
Aktivieren Sie den cgi-bin-Speicherort, wie er durch das benutzerdefinierte virtuelle Hosts-Layout definiert ist. Sie können cgi-bin im DocumentRoot-Verzeichnis belassen, wenn Sie möchten.
ScriptAlias /cgi-bin/ /home/demo/public_html/domain.com/cgi-bin/
<Location /cgi-bin>
Options +ExecCGI
</Location>
Verzeichnisoptionen festlegen
Legen Sie die Optionen für das angegebene Verzeichnis fest. Das folgende Beispiel aktiviert die FollowSymLinks-Option für das öffentliche Verzeichnis vondomain.com.
Options FollowSymLinks
Im Folgenden finden Sie weitere Optionen, die Sie festlegen können:
Option zum Durchsuchen von Verzeichnissen
Verwenden Sie -Indexes, um das Durchsuchen von Verzeichnissen zu deaktivieren. Um das Durchsuchen von Verzeichnissen zu aktivieren, verwenden Sie +Indexes.
Options -Indexes
SSI-Option
Server Side Includes aktivieren oder deaktivieren. Das folgende Beispiel disablesit.
Options -Includes
Symlinks-Option
Aktivieren oder deaktivieren Sie die Option, Symlinks zu folgen. Seien Sie vorsichtig mit dieser Option, da sie zu Sicherheitsrisiken führen kann (versehentliche Verknüpfung mit Konfigurationsordnern).
Options -FollowSymLinks
Sie können die Direktive SymLinksIfOwnerMatch anstelle von FollowSymLinks verwenden. Die Direktive SymLinksIfOwnerMatch erlaubt symbolischen Links nur dann zu folgen, wenn der Eigentümer des Links mit dem Eigentümer der Zieldatei oder des Zielverzeichnisses identisch ist (in Bezug auf die Eigentümerschaft/Berechtigungen des Linux-Dateisystems). Dies verhindert viele der Sicherheitsrisiken, die eine einfache FollowSymlinks-Anweisung erzeugen kann.
.htaccess-Option
Setzen Sie AllowOverride auf None, um die .htaccess-Unterstützung zu deaktivieren. Setzen Sie es auf Alle, um Unterstützung zuzulassen.
AllowOverride None
Sie können auch angeben, welche .htaccess-Funktionen aktiviert werden sollen, wie zum Beispiel:
AllowOverride AuthConfig Indexes
Die Apachehtaccess- und AllowOverride-Dokumente enthalten weitere Informationen zu den verschiedenen Funktionen.
Denken Sie daran, Ihre .htaccess-Datei besonders zu schützen. Sie können dies tun, indem Sie es in etwas Unverständliches umbenennen und den Zugriff auf die Datei aus externen Quellen verweigern:
AccessFileName .myobscurefilename
<Files ~ "^\.my">
<SatisfyAll>
Require all denied
</SatisfyAll>
</Files>
Hinweis :Das vorhergehende Beispiel ist für Apache 2.4 formatiert. Wenn Sie 2.2 verwenden, ersetzen Sie **
Keine Optionen
Geben Sie Keine an, um alle verfügbaren Optionen zu deaktivieren.
Options None
Optionshierarchie
Die Optionsdirektiven können pro Verzeichnis gesetzt werden, wie im folgenden Beispiel gezeigt:
AllowOverride None
Options None
AllowOverride All
Die erste Verzeichniseinstellung würde alle Optionen ausschalten und die.htaccess-Unterstützung für alle Verzeichnisse deaktivieren.
Die zweite Verzeichniseinstellung würde jedoch die erste außer Kraft setzen und die Unterstützung von .htaccess für das Verzeichnis domain.com/public zulassen.
Zusammenfassung
Die virtuelle Hosts-Datei ist ein einfach zu verwendendes, aber sehr leistungsfähiges Werkzeug. Wir empfehlen, dass Sie eine Einstellung eingeben und diese dann testen. Geben Sie dann die nächste Einstellung ein und testen Sie sie usw.
Nachdem Sie sich damit vertraut gemacht haben, werden Sie feststellen, dass Sie alle Ihre Webordner und -dateien genau steuern können.