Installation und Administration des Webservers NGINX (engineX)
Solange nur ein Web-Server auf der virtuellen Maschine betrieben wird, geht das einfach mit 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 gleich NGINX einsetzen. Zudem ist die Administration von NGINX einfach und übersichtlich. Es ist 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 nginxDas war's. NGINX wurde bereits gestartet. Wir können das prüfen, indem wir in einem Browser den Link zu unserer Domain eingeben: http://myDomain.xyz. 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 -xeDie Konfiguration von NGINX ist in der Datei /etc/nginx/nginx.conf zu finden und sollte etwa so aussehen:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}Beachten Sie die zweite und drittletzte Zeile. Dort ist festgelegt, dass sich die Serverkonfigurationen im Verzeichnis /etc/nginx/sites-enabled/ befinden.
Für die Konfiguration des Servers legen wir im Verzeichnis /etc/nginx/sites-available/ eine neue Datei mit dem Namen <myDomain.xyz> 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 anlegen zu können. Der Inhalt der Datei <myDomain.xyz> könnte so aussehen:
server {
listen 443;
server_name <myDomain.xyz> www.<myDomain.xyz>;
ssl on;
ssl_certificate /etc/letsencrypt/live/<myDomain.xyz>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<myDomain.xyz>/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 <myDomain.xyz> www.<myDomain.xyz>;
return 301 https://<myDomain.xyz>;
}Damit ist festgelegt, dass Anfragen an die Subdomain www.<myDomain.xyz> 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 <myDomain.xyz> 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: <myDomain.xyz>) ist beliebig
sudo ln -s /etc/nginx/sites-available/<myDomain.xyz> <myDomain.xyz>
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 <myDomain.xyz> -> /etc/nginx/sites-available/<myDomain.xyz>Bleibt nur noch NGINX zu stoppen und wieder zu starten:
sudo systemctl stop nginx
sudo systemctl start nginxDas 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.