Website-Suche

So installieren Sie Nginx mit virtuellen Hosts und SSL-Zertifikat


Nginx (kurz für Engine-x) ist ein kostenloser, quelloffener, leistungsstarker, leistungsstarker und skalierbarer HTTP- und Reverse-Proxy-Server, ein Mail- und Standard-TCP/UDP-Proxy Server. Es ist einfach zu verwenden und zu konfigurieren und verfügt über eine einfache Konfigurationssprache. Aufgrund seiner Skalierbarkeit und Leistung ist Nginx heute die bevorzugte Webserversoftware für den Betrieb stark ausgelasteter Websites.

In diesem Artikel wird erläutert, wie Sie Nginx als HTTP-Server verwenden, ihn für die Bereitstellung von Webinhalten konfigurieren, namensbasierte virtuelle Hosts einrichten und SSL für sichere Datenübertragungen erstellen und installieren, einschließlich eines selbstsignierten Zertifikats unter Ubuntu und CentOS .

So installieren Sie den Nginx-Webserver

Beginnen Sie zunächst mit der Installation des Nginx-Pakets aus den offiziellen Repositorys mithilfe Ihres Paketmanagers wie gezeigt.

------------ On Ubuntu ------------ 
sudo apt update 
sudo apt install nginx 

------------ On CentOS ------------
sudo yum update 
sudo yum install epel-release 
sudo yum install nginx 

Nachdem das Nginx-Paket installiert ist, müssen Sie den Dienst zunächst starten, ihn für den automatischen Start beim Booten aktivieren und seinen Status anzeigen, indem Sie die folgenden Befehle verwenden. Beachten Sie, dass es unter Ubuntu automatisch gestartet und aktiviert werden sollte, während das Paket vorkonfiguriert ist.

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Zu diesem Zeitpunkt sollte der Nginx-Webserver betriebsbereit sein. Sie können den Status mit dem Befehl netstat überprüfen.

sudo netstat -tlpn | grep nginx

Wenn auf Ihrem System eine Firewall aktiviert ist, müssen Sie die Ports 80 und 443 öffnen, um HTTP- und HTTPS-Verkehr zuzulassen bzw. durch sie hindurch, indem man läuft.

------------ On CentOS ------------
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload 

Die ideale Methode zum Testen der Nginx-Installation und zum Überprüfen, ob sie ausgeführt wird und Webseiten bereitstellen kann, besteht darin, einen Webbrowser zu öffnen und auf die IP des Servers zu verweisen.

http://Your-IP-Address
OR
http://Your-Domain.com

Eine funktionierende Installation sollte durch den folgenden Bildschirm angezeigt werden.

So konfigurieren Sie den Nginx-Webserver

Die Konfigurationsdateien von Nginx befinden sich im Verzeichnis /etc/nginx und die globale Konfigurationsdatei befindet sich unter /etc/nginx/nginx.conf sowohl auf CentOS als auch auf Ubuntu.

Nginx besteht aus Modulen, die durch verschiedene Konfigurationsoptionen, sogenannte Anweisungen, gesteuert werden. Eine Direktive kann entweder einfach (in der Form Name und Werte, abgeschlossen mit ;) oder block (mit zusätzlichen Anweisungen, die mit umschlossen sind) sein {}). Und eine Blockanweisung, die andere Anweisungen enthält, wird als Kontext bezeichnet.

Alle Anweisungen werden ausführlich in der Nginx-Dokumentation auf der Projektwebsite erläutert. Weitere Informationen finden Sie hier.

So stellen Sie statische Inhalte mit Nginx im Standalone-Modus bereit

Auf einer grundlegenden Ebene kann Nginx zur Bereitstellung statischer Inhalte wie HTML- und Mediendateien im Standalone-Modus verwendet werden, wobei nur der Standardserverblock verwendet wird (analog zu Apache, wo keine virtuellen Hosts konfiguriert wurden).

Wir beginnen mit einer kurzen Erläuterung der Konfigurationsstruktur in der Hauptkonfigurationsdatei.

 
sudo vim /etc/nginx/nginx.conf

Wenn Sie sich diese Nginx-Konfigurationsdatei ansehen, sollte die Konfigurationsstruktur wie folgt aussehen und wird als Hauptkontext bezeichnet, der viele andere einfache und Blockanweisungen enthält. Der gesamte Webverkehr wird im http-Kontext abgewickelt.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Das Folgende ist ein Beispiel für eine Nginx-Hauptkonfigurationsdatei (/etc/nginx/nginx.conf), wobei der obige http-Block eine Include-Direktive enthält, die Nginx mitteilt, wo Website-Konfigurationsdateien (virtuelle Hostkonfigurationen) zu finden sind. .

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Beachten Sie, dass Sie unter Ubuntu auch eine zusätzliche Include-Anweisung (include /etc/nginx/sites-enabled/*;) finden, in der das Verzeichnis /etc /nginx/sites-enabled/ speichert Symlinks zu den in /etc/nginx/sites-available/ erstellten Website-Konfigurationsdateien, um die Websites zu aktivieren. Und durch das Löschen eines Symlinks wird diese bestimmte Site deaktiviert.

Basierend auf Ihrer Installationsquelle finden Sie die Standard-Website-Konfigurationsdatei unter /etc/nginx/conf.d/default.conf (wenn Sie aus dem offiziellen NGINX-Repository installiert haben). und EPEL) oder /etc/nginx/sites-enabled/default (wenn Sie aus Ubuntu-Repositorys installiert haben).

Dies ist unser Beispiel-Standard-Nginx-Serverblock, der sich unter /etc/nginx/conf.d/default.conf auf dem Testsystem befindet.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Eine kurze Erklärung der Anweisungen in der obigen Konfiguration:

  • listen: Gibt den Port an, auf dem der Server lauscht.
  • Servername: Definiert den Servernamen, bei dem es sich um exakte Namen, Platzhalternamen oder reguläre Ausdrücke handeln kann.
  • root: Gibt das Verzeichnis an, aus dem Nginx Webseiten und andere Dokumente bereitstellt.
  • Index: Gibt die Art(en) der Indexdatei(en) an, die bereitgestellt werden sollen.
  • Standort: Wird zur Verarbeitung von Anfragen für bestimmte Dateien und Ordner verwendet.

Wenn Sie in einem Webbrowser mit dem Hostnamen localhost oder seiner IP-Adresse auf den Server verweisen, verarbeitet dieser die Anfrage und stellt die Datei /var/www/html/index.html bereit. und speichert das Ereignis sofort in seinem Zugriffsprotokoll (/var/log/nginx/access.log) mit einer 200 (OK)-Antwort. Im Falle eines Fehlers (fehlgeschlagenes Ereignis) wird die Meldung im Fehlerprotokoll (/var/log/nginx/error.log) aufgezeichnet.

Weitere Informationen zur Anmeldung bei Nginx finden Sie unter So konfigurieren Sie benutzerdefinierte Zugriffs- oder Fehlerprotokollformate in Nginx.

Anstatt die Standardprotokolldateien zu verwenden, können Sie benutzerdefinierte Protokolldateien für verschiedene Websites definieren, wie wir später im Abschnitt „Einrichten namensbasierter virtueller Hosts (Serverblöcke)“ sehen werden.

So beschränken Sie den Zugriff auf eine Webseite mit Nginx

Um den Zugriff auf Ihre Website/Anwendung oder einige Teile davon einzuschränken, können Sie eine grundlegende HTTP-Authentifizierung einrichten. Dies kann im Wesentlichen dazu verwendet werden, den Zugriff auf den gesamten HTTP-Server, einzelne Serverblöcke oder Standortblöcke einzuschränken.

Erstellen Sie zunächst mit dem Dienstprogramm htpasswd eine Datei, in der Ihre Zugangsdaten (Benutzername/Passwort) gespeichert werden.

 
yum install httpd-tools		#RHEL/CentOS
sudo apt install apache2-utils	#Debian/Ubuntu

Als Beispiel fügen wir dieser Liste den Benutzer admin hinzu (Sie können so viele Benutzer wie möglich hinzufügen), wobei die Option -c zur Angabe der Passwortdatei und die Option -B verwendet wird um das Passwort zu verschlüsseln. Sobald Sie [Enter] drücken, werden Sie aufgefordert, das Benutzerpasswort einzugeben:

sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Dann weisen wir der Passwortdatei die richtigen Berechtigungen und Eigentümer zu (ersetzen Sie den Benutzer und die Gruppe nginx durch www-data unter Ubuntu).

sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Wie bereits erwähnt, können Sie den Zugriff auf Ihren Webserver, eine einzelne Website (mithilfe ihres Serverblocks) oder ein bestimmtes Verzeichnis oder eine bestimmte Datei beschränken. Um dies zu erreichen, können zwei nützliche Anweisungen verwendet werden:

  • auth_basic – aktiviert die Validierung von Benutzername und Passwort mithilfe des Protokolls „HTTP Basic Authentication“.
  • auth_basic_user_file – gibt die Datei der Anmeldeinformationen an.

Als Beispiel zeigen wir, wie man das Verzeichnis /var/www/html/protected mit einem Passwort schützt.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Speichern Sie nun die Änderungen und starten Sie den Nginx-Dienst neu.

sudo systemctl restart nginx 

Wenn Sie Ihren Browser das nächste Mal auf das oben genannte Verzeichnis (http://localhost/protected) verweisen, werden Sie aufgefordert, Ihre Anmeldeinformationen (Benutzername admin und das gewählte Passwort) einzugeben ).

Nach erfolgreicher Anmeldung können Sie auf den Inhalt des Verzeichnisses zugreifen. Andernfalls wird die Fehlermeldung „401-Autorisierung erforderlich“ angezeigt.

So richten Sie namensbasierte virtuelle Hosts (Serverblöcke) in Nginx ein

Der Serverkontext ermöglicht die Speicherung und Bereitstellung mehrerer Domänen/Sites auf derselben physischen Maschine oder demselben virtuellen privaten Server (VPS). Im http-Kontext für jede Site/Domäne können mehrere Serverblöcke (die virtuelle Hosts darstellen) deklariert werden. Nginx entscheidet anhand des empfangenen Anforderungsheaders, welcher Server eine Anforderung verarbeitet.

Wir demonstrieren dieses Konzept anhand der folgenden Dummy-Domänen, die sich jeweils im angegebenen Verzeichnis befinden:

  • wearelinux-console.net – /var/www/html/wearelinux-console.net/
  • welovelinux.com – /var/www/html/welovelinux.com/

Weisen Sie als Nächstes jeder Site die entsprechenden Berechtigungen für das Verzeichnis zu.

sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Erstellen Sie nun in jedem public_html-Verzeichnis eine Beispieldatei index.html.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Als nächstes erstellen Sie die Serverblock-Konfigurationsdateien für jede Site im Verzeichnis /etc/httpd/conf.d.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Fügen Sie die folgende Serverblockdeklaration in die Datei wearelinux-console.net.conf ein.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Fügen Sie als Nächstes die folgende Serverblockdeklaration in die Datei welovelinux.com.conf ein.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Um die letzten Änderungen zu übernehmen, starten Sie den Nginx-Webserver neu.

sudo systemctl restart nginx

und wenn Sie Ihren Webserver auf die oben genannten Adressen verweisen, sollten Sie die Hauptseiten der Dummy-Domains sehen.

http://wearelinux-console.net
http://welovelinux.com

Wichtig: Wenn Sie SELinux aktiviert haben, erlaubt die Standardkonfiguration Nginx nicht, auf Dateien außerhalb bekannter autorisierter Speicherorte zuzugreifen (z. B /etc/nginx für Konfigurationen, /var/log/nginx für Protokolle, /var/www/html für Webdateien usw.) .

Sie können dies beheben, indem Sie entweder SELinux deaktivieren oder den richtigen Sicherheitskontext festlegen. Weitere Informationen finden Sie in dieser Anleitung: Nginx und Nginx Plus mit SELinux verwenden auf der Nginx Plus-Website.

So installieren und konfigurieren Sie SSL mit Nginx

SSL-Zertifikate helfen dabei, sicheres HTTP (HTTPS) auf Ihrer Website zu ermöglichen, was für den Aufbau einer vertrauenswürdigen/sicheren Verbindung zwischen den Endbenutzern und Ihrem Server durch die Verschlüsselung der Informationen unerlässlich ist werden an, von oder innerhalb Ihrer Website übertragen.

Wir behandeln, wie Sie ein selbstsigniertes Zertifikat erstellen und installieren und eine Zertifikatssignierungsanforderung (CSR) generieren, um ein SSL-Zertifikat von einer Zertifizierungsstelle (CA) zu erhalten. zur Verwendung mit Nginx.

Selbstsignierte Zertifikate können kostenlos erstellt werden und eignen sich praktisch für Testzwecke und für interne Nur-LAN-Dienste. Für öffentlich zugängliche Server wird dringend empfohlen, ein von einer Zertifizierungsstelle (z. B. Let’s Encrypt) ausgestelltes Zertifikat zu verwenden, um die Authentizität zu gewährleisten.

Um ein selbstsigniertes Zertifikat zu erstellen, erstellen Sie zunächst ein Verzeichnis, in dem Ihre Zertifikate gespeichert werden.

sudo mkdir /etc/nginx/ssl-certs/

Generieren Sie dann Ihr selbstsigniertes Zertifikat und den Schlüssel mit dem Befehlszeilentool openssl.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Beschreiben wir kurz die im obigen Befehl verwendeten Optionen:

  • req -X509 – zeigt an, dass wir ein x509-Zertifikat erstellen.
  • -nodes (NO DES) – bedeutet „den Schlüssel nicht verschlüsseln“.
  • -days 365 – gibt die Anzahl der Tage an, für die das Zertifikat gültig ist.
  • -newkey rsa:2048 – gibt an, dass der mit dem RSA-Algorithmus generierte Schlüssel 2048-Bit sein sollte.
  • -keyout /etc/nginx/ssl-certs/nginx.key – gibt den vollständigen Pfad des RSA-Schlüssels an.
  • -out /etc/nginx/ssl-certs/nginx.crt – gibt den vollständigen Pfad des Zertifikats an.

Öffnen Sie als Nächstes die Konfigurationsdatei Ihres virtuellen Hosts und fügen Sie die folgenden Zeilen zu einer Serverblockdeklaration hinzu, die Port 443 überwacht. Wir werden mit der virtuellen Hostdatei /etc/nginx/conf.d/wearelinux-console.net.conf testen.

sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Fügen Sie dann die SSL-Direktive zur Nginx-Konfigurationsdatei hinzu. Sie sollte etwa wie unten aussehen.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Starten Sie nun Nginx neu und richten Sie Ihren Browser auf die folgende Adresse.

https://www.wearelinux-console.net

Wenn Sie ein SSL-Zertifikat von einer Zertifizierungsstelle erwerben möchten, müssen Sie wie gezeigt eine Zertifikatssignierungsanforderung (Certificate Signing Request, CSR) generieren.

sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Sie können eine CSR auch aus einem vorhandenen privaten Schlüssel erstellen.

sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Anschließend müssen Sie den generierten CSR an eine CA senden, um die Ausstellung eines von einer CA signierten SSL-Zertifikats anzufordern. Sobald Sie Ihr Zertifikat von der Zertifizierungsstelle erhalten haben, können Sie es wie oben gezeigt konfigurieren.

Lesen Sie auch: Der ultimative Leitfaden zum Sichern, Härten und Verbessern der Leistung des Nginx-Webservers

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man Nginx installiert und konfiguriert. behandelt, wie man namensbasiertes virtuelles Hosting mit SSL einrichtet, um Datenübertragungen zwischen dem Webserver und einem Client zu sichern.

Wenn Sie während Ihres Nginx-Installations-/Konfigurationsprozesses Rückschläge erlebt haben oder Fragen oder Kommentare haben, verwenden Sie das unten stehende Feedback-Formular, um uns zu kontaktieren.