Zurück zum Blog

Nginx installieren: Webserver und Reverse Proxy

Was ist Nginx? Nginx auf einem Ubuntu-Server installieren, Server Blocks einrichten, Reverse Proxy für Node.js, Let's Encrypt SSL und typische Fehler.

Nodesty-Team6 Min. LesezeitServer
Der Schriftzug Nginx mit Reverse proxy, SSL und Server blocks auf dunklem Nodesty-Hintergrund

Nginx ist einer der weltweit meistgenutzten Webserver. Es liefert statische Dateien schnell aus, bedient Tausende gleichzeitige Verbindungen mit wenig Arbeitsspeicher und wird vor allem als Reverse Proxy eingesetzt: Es empfängt Besucher mit Ihrer Domain und Ihrem SSL-Zertifikat und leitet die Anfrage an Ihre Node.js-, Python- oder PHP-Anwendung im Hintergrund weiter. Nginx zu installieren dauert nur wenige Befehle; was Sie wirklich lernen müssen, ist die Logik der Konfigurationsdateien.

In dieser Anleitung zeigen wir, wie Sie Nginx auf einem Ubuntu-Server installieren, Server Blocks konfigurieren, eine Anwendung per Reverse Proxy veröffentlichen, mit Let's Encrypt ein kostenloses SSL-Zertifikat einrichten und typische Fehler beheben.

Was ist Nginx und wofür nutzt man es?

Nginx wird für drei Hauptaufgaben eingesetzt:

  • Webserver: Liefert statische Dateien wie HTML, CSS, JavaScript und Bilder direkt aus.
  • Reverse Proxy: Leitet eingehende Anfragen an eine oder mehrere Anwendungen im Hintergrund weiter. Aufgaben wie SSL, Komprimierung und Caching übernimmt es anstelle der Anwendung.
  • Load Balancer: Verteilt den Traffic auf mehrere Instanzen derselben Anwendung.
MerkmalNginxApacheLiteSpeed
ArchitekturEreignisbasiert, wenig SpeicherProzess-/Thread-basiertEreignisbasiert
.htaccess-SupportNeinJaJa (Apache-kompatibel)
Typischer EinsatzvServer, Reverse Proxy, statische WebsitesKlassische PHP-WebsitesShared Hosting, WordPress
LizenzOpen SourceOpen SourceKommerziell (OpenLiteSpeed Open Source)

Wenn Sie Ihren eigenen vServer verwalten, ist Nginx für die meisten Projekte die praktischste Wahl. Beim Shared Hosting verwaltet dagegen der Anbieter den Webserver; die Webhosting-Pakete von Nodesty laufen zum Beispiel mit LiteSpeed.

Nginx auf Ubuntu und Debian installieren

Nachdem Sie sich per SSH mit Ihrem Server verbunden haben:

sudo apt update
sudo apt install nginx

Nach der Installation startet Nginx automatisch. Prüfen Sie den Status:

systemctl status nginx

Erlauben Sie Web-Traffic in der Firewall. Das Profil Nginx Full öffnet die Ports 80 (HTTP) und 443 (HTTPS) zusammen:

sudo ufw allow 'Nginx Full'

Wenn Sie im Browser http://server-ip aufrufen und die Seite „Welcome to nginx!“ sehen, ist die Installation abgeschlossen. Ports und Firewall-Einstellungen erklären wir ausführlich in Was ist ein Port?

Unter AlmaLinux und Rocky Linux installieren Sie Nginx mit sudo dnf install nginx und sudo systemctl enable --now nginx; in der Firewall führen Sie sudo firewall-cmd --permanent --add-service=http --add-service=https und anschließend sudo firewall-cmd --reload aus.

Die Konfigurationsdateien von Nginx

PfadInhalt
/etc/nginx/nginx.confHauptkonfiguration; müssen Sie meist nicht ändern
/etc/nginx/sites-available/Eine Konfigurationsdatei (Server Block) pro Website
/etc/nginx/sites-enabled/Verknüpfungen (Symlinks) auf aktivierte Websites
/var/www/Üblicher Ordner für die Dateien der Websites
/var/log/nginx/Die Logs access.log und error.log

Unter Ubuntu und Debian definieren Sie Websites im Ordner sites-available und aktivieren sie, indem Sie im Ordner sites-enabled eine Verknüpfung anlegen. Unter AlmaLinux gibt es diese Ordner nicht; dort schreiben Sie die Website-Dateien mit der Endung .conf direkt nach /etc/nginx/conf.d/.

Gewöhnen Sie sich nach jeder Änderung zwei Befehle an:

sudo nginx -t
sudo systemctl reload nginx

nginx -t testet die Konfiguration und zeigt Fehler mit Zeilennummer an. reload lädt die neue Konfiguration, ohne offene Verbindungen zu trennen.

Die erste Website veröffentlichen: Server Block

Stellen Sie sicher, dass der A-Eintrag Ihrer Domain auf die IP-Adresse Ihres Servers zeigt; wie das funktioniert, erklären wir in Was ist DNS? Legen Sie dann einen Ordner für die Website an:

sudo mkdir -p /var/www/ihredomain.de
echo "Hallo Nginx" | sudo tee /var/www/ihredomain.de/index.html

Erstellen Sie die Datei /etc/nginx/sites-available/ihredomain.de:

server {
    listen 80;
    listen [::]:80;
    server_name ihredomain.de www.ihredomain.de;

    root /var/www/ihredomain.de;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Aktivieren Sie die Website und laden Sie Nginx neu:

sudo ln -s /etc/nginx/sites-available/ihredomain.de /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

server_name legt fest, an welche Website Nginx eine eingehende Anfrage weitergibt. Um mehrere Websites auf demselben Server zu betreiben, reicht es, für jede Domain eine eigene Datei anzulegen.

Reverse Proxy: eine Node.js-Anwendung veröffentlichen

Eine Node.js-, Python- oder andere Anwendung läuft meist auf einem Port wie 3000. Statt diesen Port ins Internet zu öffnen, lassen Sie die Anwendung nur auf 127.0.0.1 lauschen und schalten Nginx davor:

server {
    listen 80;
    listen [::]:80;
    server_name app.ihredomain.de;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        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;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
  • proxy_pass: Die Adresse der Anwendung, an die die Anfrage weitergeleitet wird.
  • X-Real-IP und X-Forwarded-For: Sorgen dafür, dass die Anwendung die echte IP-Adresse des Besuchers sieht. Ohne diese Header sieht die Anwendung jede Anfrage so, als käme sie von 127.0.0.1.
  • Upgrade und Connection: Nötig, damit WebSocket-Verbindungen funktionieren. Wenn Sie Echtzeit-Bibliotheken wie Socket.IO nutzen, lassen Sie diese Zeilen nicht weg.

Damit Ihre Anwendung dauerhaft läuft, können Sie pm2 oder systemd verwenden; beides zeigen wir in unserer Anleitung Discord-Bot hosten. Läuft Ihre Anwendung in Docker, veröffentlichen Sie den Port als 127.0.0.1:3000:3000; warum, erklären wir in der Anleitung Docker installieren.

Kostenloses SSL mit Let's Encrypt

Certbot holt das Let's-Encrypt-Zertifikat, aktualisiert Ihre Nginx-Konfiguration und richtet die automatische Erneuerung ein:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d ihredomain.de -d www.ihredomain.de

Certbot erreicht Ihren Server über Port 80, um die Domain zu validieren. Stellen Sie deshalb vor dem Befehl sicher, dass die DNS-Einträge auf den Server zeigen und Port 80 offen ist. Während der Einrichtung wird auch die Weiterleitung von HTTP auf HTTPS konfiguriert.

So testen Sie, ob die automatische Erneuerung funktioniert:

sudo certbot renew --dry-run

Wie SSL funktioniert und welche Zertifikatstypen es gibt, erklären wir in Was ist ein SSL-Zertifikat?

Nützliche Einstellungen

Einige gängige Einstellungen, die Sie in einen Server Block aufnehmen können:

client_max_body_size 50M;

gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;

location ~* \.(css|js|png|jpg|jpeg|webp|svg|woff2)$ {
    expires 30d;
    add_header Cache-Control "public";
}
  • client_max_body_size: Die maximale Größe hochgeladener Dateien. Der Standardwert ist 1 MB; größere Uploads führen zum Fehler 413.
  • gzip: Komprimiert textbasierte Dateien, damit Seiten schneller laden.
  • expires: Sorgt dafür, dass statische Dateien im Browser zwischengespeichert werden.

Um die Serverversion in den Antwort-Headern auszublenden, aktivieren Sie im http-Block von /etc/nginx/nginx.conf die Zeile server_tokens off;.

Typische Nginx-Fehler

  • 502 Bad Gateway: Nginx erreicht die Anwendung im Hintergrund nicht. Prüfen Sie, ob die Anwendung läuft und der Port in der Zeile proxy_pass stimmt.
  • 504 Gateway Timeout: Die Anwendung antwortet zu spät. Für lang laufende Vorgänge können Sie proxy_read_timeout erhöhen, die eigentliche Lösung ist aber, die Langsamkeit der Anwendung zu beheben.
  • 413 Request Entity Too Large: Die hochgeladene Datei ist größer als client_max_body_size.
  • 403 Forbidden: Nginx kann nicht auf die Dateien zugreifen, oder im Ordner fehlt eine index-Datei. Prüfen Sie die Dateirechte und den root-Pfad.
  • Statt Ihrer Domain erscheint die Standardseite: Die Zeile server_name passt nicht zur Domain, oder die Website ist nicht im Ordner sites-enabled verknüpft.

In jedem Fall sollten Sie zuerst ins Fehlerlog schauen:

sudo tail -f /var/log/nginx/error.log

Nodesty-Server für Nginx

Um Nginx selbst zu installieren und zu verwalten, brauchen Sie einen Server mit Root-Zugriff. Die AMD Ryzen 9 9950X vServer von Nodesty beantworten Anfragen Ihrer Webanwendungen dank hoher Single-Core-Leistung schnell; die AMD EPYC 7763 vServer bieten viel RAM für zahlreiche Websites und Datenbanken. Beide Pakete umfassen NVMe-Speicher, L3–L7-DDoS-Schutz durch nShield und kostenlose tägliche Backups mit 7 Tagen Aufbewahrung. Wenn Sie nur eine Website veröffentlichen möchten, ohne einen Server zu verwalten, sind unsere Webhosting-Pakete mit LiteSpeed die praktischere Wahl.

Häufig gestellte Fragen

Soll ich Nginx oder Apache verwenden?

Auf einem neuen vServer ist Nginx in den meisten Fällen der bessere Start. Es bedient viele gleichzeitige Verbindungen mit wenig Arbeitsspeicher und ist als Reverse Proxy weit verbreitet. Apache erleichtert dank .htaccess-Unterstützung Einstellungen pro Verzeichnis; wenn ältere PHP-Anwendungen auf diese Datei angewiesen sind, macht Apache Ihnen das Leben leichter.

Was ist ein Reverse Proxy?

Ein Reverse Proxy ist ein Server, der die Anfrage des Besuchers entgegennimmt und an eine andere Anwendung im Hintergrund weiterleitet. Nginx nimmt zum Beispiel auf den Ports 80 und 443 Ihre Domain und SSL entgegen und leitet die Anfrage an Ihre Node.js-Anwendung auf Port 3000 weiter. So ist Ihre Anwendung nicht direkt aus dem Internet erreichbar.

Wodurch entsteht der Fehler 502 Bad Gateway?

Nginx liefert 502, wenn es die Anwendung, an die es die Anfrage weiterleitet, nicht erreicht. Die häufigsten Ursachen sind eine Anwendung, die nicht läuft, eine Weiterleitung auf den falschen Port oder ein Absturz der Anwendung. Prüfen Sie, ob die Anwendung läuft und die Portnummer in der Zeile proxy_pass stimmt; Details stehen in /var/log/nginx/error.log.

Kann ich mehrere Websites auf einem Server betreiben?

Ja. Für jede Domain legen Sie eine eigene Server-Block-Datei an. Nginx erkennt am Domainnamen der eingehenden Anfrage, welche Website es ausliefern soll. Auch ein eigenes SSL-Zertifikat für jede Website erhalten Sie mit Certbot über einen einzigen Befehl.

Wie lange ist ein Let's-Encrypt-Zertifikat gültig?

Let's-Encrypt-Zertifikate sind kurzlebig und müssen regelmäßig erneuert werden. Certbot richtet bei der Installation automatisch einen Timer für die Erneuerung ein; mit sudo certbot renew --dry-run testen Sie, ob die Erneuerung funktioniert.

Kann ich Nginx im Nodesty-Webhosting konfigurieren?

Unsere Webhosting-Pakete laufen mit dem Webserver LiteSpeed, und die Serververwaltung liegt bei uns; Einstellungen nehmen Sie über das Control Panel und .htaccess vor. Wenn Sie Nginx selbst installieren und verwalten möchten, brauchen Sie einen vServer mit Root-Zugriff.

Nodesty

Über den Autor

Nodesty-Team · Infrastruktur und Support

Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.

Verwandte Artikel

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································