NGINX (engineX)

Solange nur ein Web-Server auf der virtuellen Maschine betrieben wird, geht das mit dem Custom Server von Next.js. Dies kann aber, je nach Betriebssystem, zu Problemen mit den Zugriffsrechten führen, da Node.js (und damit Next.js) standardmäßig auf Port 3000 lauscht. Zwei Web-Server gleichzeitig lassen sich so auch nicht betreiben. Wir wollen aus diesen Gründen gleichNGINXeinsetzen. Zudem ist die Administration von NGINX einfach und übersichtlich. Es ist gewissermaßen ein Sahnehäubchen.

Die NGINX-Installation ist einfach (der Port 80 sollte frei sein):

# Aktualisieren der Paketlisten
sudo apt update
# Update der Pakete
sudo apt upgrade
# Installation von NGINX
sudo apt install nginx

Das war's. NGINX wurde bereits gestartet. Wir können das prüfen, indem wir in einem Browser den Link zu unserer Domain eingebenhttp://DomainName . NGINX antwortet mit:

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.

Zum Starten, Stoppen und für Statusabfragen gibt es folgende Kommandos:

# Status abfragen
sudo systemctl status nginx
# NGINX starten
sudo systemctl start nginx
# NGINX stoppen
sudo systemctl stop nginx
# Abfragen des systemd-Journals
journalctl -xe

Für die Konfiguration des Servers legen wir im Verzeichnis /etc/nginx/sites-available/ eine neue Datei mit dem Namen nodeweb.tk an. In dem Verzeichnis liegt bereits eine Datei namens default. Vermutlich müssen Sie die Zugriffsrechte auf das Verzeichnis /etc/nginx/sites-available/ erst erweitern (Kommando: sudo chmod .....) um die Datei default löschen und die neue Datei nodeweb.tk anlegen zu können. Der Inhalt der Datei nodeweb.tk könnte so aussehen:

server {
listen 443;
server_name nodeweb.tk www.nodeweb.tk;
ssl on;
ssl_certificate /etc/letsencrypt/live/nodeweb.tk/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodeweb.tk/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded_Proto $scheme;
}
}
server {
listen 80;
server_name nodeweb.tk www.nodeweb.tk;
return 301 https://nodeweb.tk;
}

Damit ist festgelegt, dass Anfragen an die Subdomain www.nodeweb.tk auch auf dem Server 127.0.0.1:3000 landen. Anfragen an den unverschlüsselten Port 80 werden zum verschlüsselten Port 443 umgeleitet. Die Konfiguration verknüpft damit Domain, Zertifikat und Web-Server. Toll, oder?

Leider funktionieren diese Verknüpfungen noch nicht, es fehlt eine Kleinigkeit, ein symbolischer Link von einer (beliebigen) Datei im Verzeichnis /etc/nginx/sites-enabled/ zu unserer Konfigurationsdatei nodeweb.tk im Verzeichnis /etc/nginx/sites-availabe/. Zum Erzeugen dieses Links wechseln wir in einem Terminalfenster in das Verzeichnis /etc/nginx/sites-enabled/ und geben ein paar Kommandos ein:

# ins Verzeichnis wechseln
cd /etc/nginx/sites-enabled
# Auflisten aller Dateien und Verzeichnisse
ls -al
# Die antwort ist:
# total 8
# drwxr-xr-x 2 root root 4096 Jan 6 12:18 .
# drwxr-xr-x 8 root root 4096 Jan 6 12:18 ..
# lrwxrwxrwx 1 root root 34 Jan 6 12:18 default -> /etc/nginx/sites-available/default
# Wir löschen den Link default
rm default
# Die Antwort ist:
# rm: cannot remove 'default': Permission denied
# Jetzt mit Administratorrechten:
sudo rm default
ls -al
# Die Antwort ist:
# total 8
# drwxr-xr-x 2 root root 4096 Jan 7 12:49 .
# drwxr-xr-x 8 root root 4096 Jan 6 12:18 ..
# Erzeugen des symbolischen Links, der Name des Links (hier: nodeweb.tk) ist beliebig
sudo ln -s /etc/nginx/sites-available/nodeweb.tk nodeweb.tk
ls -al
# Die Antwort ist:
# total 8
# drwxr-xr-x 2 root root 4096 Jan 7 12:53 .
# drwxr-xr-x 8 root root 4096 Jan 6 12:18 ..
# lrwxrwxrwx 1 root root 37 Jan 7 12:53 nodeweb.tk -> /etc/nginx/sites-available/nodeweb.tk

Bleibt nur noch NGINX zu stoppen und wieder zu starten:

sudo systemctl stop nginx
sudo systemctl start nginx

Das war ein sehr langer, anstrengender Weg von der ersten Anmeldung bei Google bis hin zum laufenden Webserver. Jetzt erst beginnt die Contenterstellung, bisher war es nur Systemadministration, viel Spaß beim weiteren Engineering.