NGinX installieren
Mit der Option "eigener Daemon" ist es möglich in einem Paket statt des Apache Webserver, den Hostsharing zentral zur Verfügung stellt, einen Nginx (oder einen anderen Webserver) in einem Webspace zu nutzen.
Port-Weiterleitung als Apache Ersatz
Mit der Bestellung des eigenen Daemon gibt man an, mit den Rechten welcher Nutzerkennung der Nginx-Prozess laufen soll. Die Nutzerkennung muss bereits angelegt sein. Ich verwende hier: xyz00-nginx. Weiterhin bittet man die Hostmaster eine Portweiterleitung über IPTables-Regeln einzurichten. Ich verwende in dieser Wikiseite 38080 für HTTP und 38443 für HTTPS. Nach Einrichtung der IPTables Regeln in der Firewall wird euer NGinX unter den normalen Ports für HTTPS und HTTPS 80 und 443 erreichbar sein.
Konfiguration
Nginx ist auf allen Managed Servern vorinstalliert. Wir müssen also lediglich eine Konfigurationsdatei anlegen und anschliessend eine eigene Instanz des Dienstes starten.
Eine Beispielkonfiguration sieht wie folgt aus:
error_log /home/pacs/xyz00/users/nginx/var/error.log warn; pid /home/pacs/xyz00/users/nginx/var/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; access_log /home/pacs/xyz00/users/nginx/var/access.log; server_names_hash_bucket_size 64; server { listen xyz00.hostsharing.net:38080 default_server; server_name _; return 301 https://$host$request_uri; } server { listen xyz00.hostsharing.net:38443 ssl http2; server_name www.hs-example.de; ssl_certificate /home/pacs/xyz00/users/nginx/etc/xyz00.hs-example.de.crt; ssl_certificate_key /home/pacs/xyz00/users/nginx/etc/xyz00.hs-example.de.key; root /home/pacs/xyz00/users/nginx/htdocs; index index.html; location / { ssi on; } } }
Betreiben des Nginx als Apache Ersatz mit Letsencrypt und HTTP Challenge
In dem Fall, dass man für einen Kunden ein Projekt auf einer Domain hostet, dessen DNS woanders eingerichtet ist, dann hat man das Problem, dass das Let's Encrypt mit DNS Challenge bei Hostsharing erstmal nicht tut.
Es gibt natürlich die Möglichkeit, die Subdomain per DNS Zonen-Delegation (siehe https://de.wikipedia.org/wiki/NS_Resource_Record#Zonendelegation) zu Hostsharing zu delegieren. Falls das aber dem Kunden zu kompliziert ist, kann man auch mit der folgenden Nginx Variante arbeiten:
Die Subdomain mit dem eigenen Nginx konfigurieren, auf den die Standardports 80 und 443 weitergeleitet werden, wie im vorhergehenden Abschnitt beschrieben.
Dann kann man auch wieder Let's Encrypt mit HTTP Challenge einsetzen.
Hier gibt es ein Ansible Projekt, das diesen Fall umsetzt: https://github.com/tpokorra/Hostsharing-Ansible-Nginx
Es gibt dort ein Skript ~/bin/addwebsite.sh
, das eine Subdomain entsprechend einrichtet, und automatisch das Let's Encrypt Zertifikat signiert und einrichtet.
Ein Cron Job wird eingerichtet, der täglich die Gültigkeit des Zertifikates überprüft und gegebenenfalls das Zertifikat erneuert.
Das Ansible Projekt richtet ebenfalls den Monit ein, der für den Start des Nginx Servers zuständig ist.
Betreiben eines lokalen Nginx
Es gibt Konstellationen, da soll die Webseite auf dem zentralen Apache Webserver ausgeliefert werden, aber die Dienste dahinter sind leichter mit Nginx zu konfigurieren. Das macht auf einem Managed Server Sinn, wo man die Ports frei wählen kann, ohne Rücksicht auf andere Benutzer. In diesem Beispiel wurde der Port 18003 gewählt, um dort intern den Nginx hören zu lassen.
In diesem Fall kann die Weiterleitung für den Apache so aussehen:
Datei xyz00-nginx@h99:~/doms/demo.example.org/htdocs-ssl/.htaccess
:
DirectoryIndex index.html RewriteEngine on RewriteBase / RewriteRule ^(.*) http://127.0.0.1:18003/$1 [proxy,last]
Die entsprechende Nginx Konfiguration sieht so aus:
error_log /home/pacs/xyz00/users/nginx/var/error.log warn; pid /home/pacs/xyz00/users/nginx/var/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; access_log /home/pacs/xyz00/nginx/var/access.log; server_names_hash_bucket_size 64; server { listen 127.0.0.1:18003; server_name _; root /home/pacs/xyz00/users/nginx/htdocs; index index.html; } }
Hier gibt es ein Ansible Projekt, das diesen Fall umsetzt: https://github.com/tpokorra/Hostsharing-Ansible-LocalNginx
Links
- Offizielles Wiki von Nginx
- Ansible Playbook für Hostsharing
- Lokaler Nginx: Ansible Playbook für Hostsharing