VirtualHosts mit nine-manage-vhosts verwalten
Einleitung
Was ist ein Virtual Host?
Virtual Hosting ist der gleichzeitige Betrieb mehrerer Websites(-Domains) auf einem gemeinsamen Host (Server).
Jeder dieser Umgebungen wird als ein Virtueller Host bezeichnet und kann individuell konfiguriert werden für das Hosting. So können mehrere Domains oder IP-Adressen genutzt werden oder benutzerspezifische Ports konfiguriert werden.
Was ist nine-manage-vhosts?
Auf Nine Managed-Servern kommt standardmässig nine-manage-vhosts
zur Verwaltung von Websites zum Einsatz.
Damit lassen sich die Virtual Hosts einfacher und schneller verwalten.
Diese VirtualHost-Konfiguration teilt dem Webserver mit, wo sich die Daten befinden und unter welcher Adresse die Seite aufrufbar ist.
nine-manage-vhosts
unterstützt die Webserver Apache2 sowie Nginx und ist kompatibel zum FTP-Verwaltungstool "FTPAdmin".
nine-manage-vhosts -h
zeigt den Hilfstext mit allen Optionen an.
www-data@server:~ $ # sudo nine-manage-vhosts -h
Manage your virtual hosts, users and certificates.
Usage:
nine-manage-vhosts user create <name> [--no-password | --ask-password | --password=<password>]
nine-manage-vhosts user update <name> (--no-password | --ask-password | --password=<password>)
nine-manage-vhosts user remove <name>
nine-manage-vhosts user list [--json]
nine-manage-vhosts webserver reload
nine-manage-vhosts virtual-host create <domain> [--user=<user>] [--webroot=<webroot>] [--template=<template>] [--template-variable=<template-variable>]... [--no-notify-services]
nine-manage-vhosts virtual-host update <domain> [--user=<user>] [--webroot=<webroot>] [--template=<template>] [--template-variable=<template-variable>]... [--no-notify-services]
nine-manage-vhosts virtual-host remove <domain> [--no-notify-services]
nine-manage-vhosts virtual-host show <domain>
nine-manage-vhosts virtual-host list [--json]
nine-manage-vhosts virtual-host notify-services <domain> [--force]
nine-manage-vhosts alias create <alias_domain> --virtual-host=<domain> [--no-notify-services]
nine-manage-vhosts alias remove <alias_domain> --virtual-host=<domain> [--no-notify-services]
nine-manage-vhosts certificate create --virtual-host=<domain>
nine-manage-vhosts certificate remove --virtual-host=<domain>
nine-manage-vhosts certificate list
nine-manage-vhosts certificate renew-expiring
nine-manage-vhosts certificate register-client --contact-email=<contact-email>
nine-manage-vhosts template list [--json]
nine-manage-vhosts -h | --help
nine-manage-vhosts -v | --version
Options:
--user=<user> Specify the user whose home directory the web app is located in.
--no-password Do not set a password for user.
--ask-password Prompt for user password.
--password=<password> Specify the user's password.
--webroot=<webroot> Specify the absolute document path.
--template=<template> Specify the template of the virtual host. Defaults to configured default template.
--virtual-host=<domain> Specify the virtual host for which the alias should be created.
--contact-email=<contact-email> Specify the contact email address to use for registration.
--json Print machine readable output (JSON).
-h --help Show this help.
-v --version Show version.
Verbindung zum Server erstellen
Standardmässig erhalten Sie bei der Bestellung eines Managed (V)Servers einen SSH/SFTP Zugang für den Systembenutzer "www-data" sowie ein Benutzerkonto für das Nine Cockpit (https://cockpit.nine.ch/).
Weitere Informationen über SSH und SFTP finden Sie unter:
Via SSH haben Sie nun Zugriff auf die Dateistruktur und befinden sich in der Regel nach der Anmeldung am Server im Ordner "/home/www-data". Darin befindet sich der Ordner "logs", in dem Sie die Zugriffs- und Fehler-Logs der jeweiligen Websites einsehen können. Die Log-Dateien sind wie folgt benannt:
Wird ein VirtualHost für einen anderen Benutzer als www-data erstellt, befänden sich die Logs im jeweiligen Benutzerordner nach dem Schema "/home/<benutzer>/logs/".
Virtual Host Verwalten
Um eine Website zu publizieren, müssen folgende Voraussetzungen erfüllt sein:
- Domain im DNS System erfassen unter https://cockpit.nine.ch/ (Falls Sie die DNS-Server von Nine benutzen möchten, geben Sie beim Registrar der Domain die Nameserver ns5.nine.ch und ns6.nine.ch an)
- VirtualHost-Konfiguration auf dem Server mithilfe von nine-manage-vhosts anlegen
- SFTP Verbindung für das Uploaden der Website
Virtual-Host erstellen
Damit die Website publiziert werden kann, braucht es einen Virtual Host. Im folgendem Beispiel sehen Sie den Befehl für das erstellen eines Virtual Host für die Website (Domain) examle.org
www-data@server:~ $ sudo nine-manage-vhosts virtual-host create example.org
Virtual Host created: example.org
example.org
===========
DOMAIN: example.org
USER: www-data
WEBROOT: /home/www-data/example.org
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
Off
PHP_VERSION
7.4
ALIASES: www.example.org
example.org.server.nine.ch
To see the configuration, use:sudo nine-manage-vhosts virtual-host show example.org
nine-manage-vhosts
erstellt im obigen Beispiel die Konfiguration für http://example.org sowie http://www.example.org und den Ordner "/home/www-data/example.org" - falls dieser noch nicht existiert -, in den die Website hochgeladen werden kann.
Die oft benutzte Subdomain "www". wird standardmässig mit angelegt und muss nicht separat eingerichtet werden.
Virtual-Hosts auflisten
Mit dem folgendem Befehl kann man alle Virtual Host auflisten und denn Konfigurationen anzeigen lassen:
www-data@server:~ $ sudo nine-manage-vhosts virtual-host list
example.org
===========
DOMAIN: example.org
USER: www-data
WEBROOT: /home/www-data/example.org/app
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
Off
PHP_VERSION
7.4
ALIASES: www.example.org
example.org.server.nine.ch
example.net
Folgend sehen Sie die Definition der einzelnen Parameter:
- DOMAIN: Die Domain bezeichnet bei den Virtual Hosts, den Websitenamen, wie eben z.B example.org.
- USER: Mit User ist der Benutzer gemeint, mit dem man auf den Virtual Host zugreifen kann.
- WEBROOT: Der Webroot ist das Verzeichnis bzw. der Pfad, indem die Website gespeichert wird.
- TEMPLATE: Das Template enthält Apache Konfigurationen, wie SSL, Timeout, Headers etc. Es dient als Vorlage und als Grundkonfiguration.
- TEMPLATE VARIABLES: Die Template Variables hingegen sind noch weitere Bestandteile eines Templates, so kann man z.B ein Template für PHP etc verwenden, die von der Nine vordefiniert wurden.
- ALIASES: Ein Alias dient als Zweitname für Ihre Website.
Virtual-Host bearbeiten
Um einen Virtual Host Eintrag anzupassen, wird nicht create verwendet, sondern update . In diesem Beispiel ändern wir den User zu testuser:
www-data@server:~ $ sudo nine-manage-vhosts virtual-host update example.org --user=testuser
Virtual Host created: example.org
example.org
===========
DOMAIN: example.org
USER: www-data
WEBROOT: /home/www-data/example.org
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
Off
PHP_VERSION
7.4
ALIASES: www.example.org
example.org.server.nine.ch
To see the configuration, use:sudo nine-manage-vhosts virtual-host show example.orgudo nine-manage-vhosts virtual-host create example.org
Folgende Parameter können mit dem update Befehl verändert werden:
- USER
- WEBROOT
- TEMPLATE
- TEMPLATE VARIABLES
Eingesetzt werden Sie wie folgt:
nine-manage-vhosts virtual-host update example.org --<Parameter>=<Wert>
Sollten Sie die folgende Fehlermeldung angezeigt bekommen, stellen Sie bitte sicher, dass Sie den update
Befehl verwenden.
Error: Virtual Host example.org already exists
PHP Version anpassen
Mittels der Template Variable PHP_VERSION
kann die vom Virtual Host verwendete PHP Version angepasst werden.
Die zur Verfügung stehenden PHP Versionen hängen von der Ubuntu Version Ihres Systems ab. Eine Übersicht finden Sie in unserem Artikel Welche Softwareversionen sind auf meinem Server verfügbar?.
www-data@server:~ $ sudo nine-manage-vhosts virtual-host update example.org --template-variable=PHP_VERSION=8.2
Virtual Host updated: example.org
example.org
=======
DOMAIN: example.org
USER: www-data
WEBROOT: /home/www-data/example.org
TEMPLATE: default
TEMPLATE VARIABLES: TIMEOUT
300
MODSEC
Off
PHP_VERSION
8.2
ALIASES: www.example.org
example.org.server.nine.ch
To see the configuration, use:sudo nine-manage-vhosts virtual-host show example.org
Unterordner - Relativer Pfad
Standardmässig zeigt der Webserver die Index-Datei (index.php, index.html, ...) im Ordner "/home/<benutzer>/<domain>" an. Je nach Applikation ist gegebenenfalls jedoch eine leicht veränderte Ordnerstruktur notwendig. Zum Beispiel muss in solchen Fällen der Inhalt im Unterordner "app" oder "public" liegen, je nach dem, was die Applikation voraussetzt.
Für genau diesen Zweck bietet sich die Option "--webroot" an, mit der dieser Ordner definiert werden kann. Für die Webapplikation, die den Unterordner "app" benötigt, sähe das Kommando wie folgt aus:
www-data@server:~ $ sudo nine-manage-vhosts virtual-host create example.org --webroot=/home/www-data/example.org/app
example.org
===========
DOMAIN: example.org
USER: www-data
WEBROOT: /home/www-data/example.org/app
TEMPLATE: default
TEMPLATE VARIABLES: MODSEC
Off
PHP_VERSION
8.2
ALIASES: www.example.org
example.org.server.nine.ch
To see the configuration, use:sudo nine-manage-vhosts virtual-host show example.org
Die folgende Konfiguration des soeben erstellten VirtualHosts zeigt in diesem Beispiel die Verwendung der Option "--webroot" mit dem Unterordner "app":
www-data@server:$ sudo nine-manage-vhosts virtual-host show example.org
[...]
ServerName example.org
ServerAlias www.example.org
ServerAlias example.org.server.nine.ch
SetEnvIf Host "example.org.server.nine.ch" TEST_URL
Header set X-Robots-Tag "noindex, nofollow" env=TEST_URL
DocumentRoot /home/www-data/example.org/app
ErrorLog /home/www-data/logs/example.org.error.log
[...]
Der angegebene Ordner muss im home-Ordner des Benutzers liegen.
ServerAlias - Gleicher Inhalt auf mehreren (Sub-)Domains
In manchen Fällen möchte man den Inhalt einer Website unter verschiedenen Domains oder Subdomains erreichbar machen. Damit die Website nicht mehrfach kopiert und konfiguriert werden muss, bietet sich ein sogenannter "ServerAlias" an, welcher wie ein Pseudonym für die Website wirkt. Der Server zeigt die Website mit den konfigurierten Adressen an.
Beispiel zur Erstellung eines Alias example.net zur bestehenden Website example.org:
www-data@server:~ $ sudo nine-manage-vhosts alias create example.net --virtual-host=example.org
example.org
===========
DOMAIN: example.org
ALIASES: www.example.org
example.org.server.nine.ch
example.net