So installieren Sie Nginx mit virtuellen Hosts und SSL-Zertifikat
In diesem Artikel wird erläutert, wie Sie Nginx als HTTP-Server verwenden, für die Bereitstellung von Webinhalten konfigurieren, namenbasierte 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 Nginx Web Server
Beginnen Sie zunächst mit der Installation des Nginx-Pakets aus den offiziellen Repositorys mithilfe Ihres Paketmanagers (siehe Abbildung).
------------ On Ubuntu ------------ $ sudo apt update $ sudo apt install nginx ------------ On CentOS ------------ $ sudo yum update $ sudo yum install epel-release $ sudo yum install nginx
Nach der Installation des Nginx-Pakets müssen Sie den Dienst zunächst starten, ihn beim Booten automatisch starten lassen und den Status mithilfe der folgenden Befehle anzeigen. Beachten Sie, dass auf Ubuntusollte es automatisch gestartet und aktiviert werden, 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 den Port öffnen 80 und 443 erlauben HTTP und HTTPS Verkehr jeweils durch sie, durch Laufen.
------------ 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 bedienen kann, besteht darin, einen Webbrowser zu öffnen und auf die IP-Adresse des Servers zu verweisen.
http://Your-IP-Address OR http://Your-Domain.com
Eine funktionierende Installation sollte auf dem 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
unter CentOS und Ubuntu.
Nginx besteht aus Modulen, die von verschiedenen Konfigurationsoptionen gesteuert werden, die als bekannt sind Richtlinien. EIN Richtlinie kann entweder einfach sein (im Formularnamen und in den mit a abgeschlossenen Werten ;
) oder Block (hat zusätzliche Anweisungen mit beigefügt {}
). Und eine Blockanweisung, die andere Anweisungen enthält, heißt a Kontext.
Alle Richtlinien werden in der Nginx-Dokumentation auf der Projektwebsite. Weitere Informationen finden Sie hier.
So liefern Sie statische Inhalte mit Nginx im Standalone-Modus
Grundsätzlich kann Nginx verwendet werden, um statische Inhalte wie HTML- und Mediendateien im Standalone-Modus bereitzustellen, in dem nur der Standardserverblock verwendet wird (analog zu Apache, in dem 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. Dies wird als Hauptkontext bezeichnet, der viele andere einfache Anweisungen und Blockanweisungen enthält. Der gesamte Webverkehr wird im http-Kontext verarbeitet.
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-Hauptkonfiguration (/etc/nginx/nginx.conf), wobei der obige http-Block eine include-Direktive enthält, die Nginx mitteilt, wo sich Website-Konfigurationsdateien befinden (virtuelle Host-Konfigurationen).
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 auf Ubuntufinden Sie auch eine zusätzliche Include-Direktive (include / etc / nginx / sites-enabled / *;), wo das Verzeichnis / etc / nginx / sites-enabled / speichert Symlinks zu den in erstellten Website-Konfigurationsdateien / etc / nginx / sites-available /, um die Sites zu aktivieren. 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 von offiziellen installiert NGINX Repository und EPEL) oder / etc / nginx / sites-enabled / default (wenn Sie von Ubuntu-Repositorys installiert haben).
Dies ist unser Beispiel für einen Standard-Nginx-Serverblock unter /etc/nginx/conf.d/default.conf auf dem Testsystem.
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 Erläuterung der Anweisungen in der obigen Konfiguration:
- Hör mal zu: gibt die an Hafen Der Server hört zu.
- Servername: Definiert den Servernamen, bei dem es sich um exakte Namen, Platzhalternamen oder reguläre Ausdrücke handeln kann.
- Wurzel: Gibt das Verzeichnis an, aus dem Nginx Webseiten und andere Dokumente bereitstellt.
- Index: Gibt den Typ (die Typen) der Indexdateien an, die bereitgestellt werden sollen.
- Ort: Wird verwendet, um Anforderungen für bestimmte Dateien und Ordner zu verarbeiten.
Von einem Webbrowser aus, wenn Sie mit dem auf den Server zeigen Hostname localhost oder seine IP-Adresse verarbeitet die Anfrage und liefert die Datei /var/www/html/index.htmlund speichert das Ereignis sofort in seinem Zugriffsprotokoll (/var/log/nginx/access.log) mit einer 200 (OK) Antwort. Im Fehlerfall (fehlgeschlagenes Ereignis) wird die Meldung im Fehlerprotokoll aufgezeichnet (/var/log/nginx/error.log).
Erfahren Sie mehr über das Anmelden NginxWeitere Informationen finden Sie unter Konfigurieren von benutzerdefinierten Zugriffs- oder Fehlerprotokollformaten in Nginx.
Anstatt die Standardprotokolldateien zu verwenden, können Sie benutzerdefinierte Protokolldateien für verschiedene Websites definieren, wie wir später im Abschnitt „Einrichten namenbasierter virtueller Hosts (Serverblöcke)“ betrachten 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 die grundlegende HTTP-Authentifizierung einrichten. Dies kann im Wesentlichen verwendet werden, um den Zugriff auf den gesamten HTTP-Server, einzelne Serverblöcke oder Standortblöcke zu beschränken.
Erstellen Sie zunächst eine Datei, in der Ihre Zugangsdaten gespeichert werden (Benutzername Passwort) mit dem htpasswd Nützlichkeit.
$ yum install httpd-tools #RHEL/CentOS $ sudo apt install apache2-utils #Debian/Ubuntu
Fügen wir dieser Liste als Beispiel den Benutzeradministrator hinzu (Sie können so viele Benutzer wie möglich hinzufügen) -c
Mit dieser Option werden die Kennwortdatei und die Option angegeben -B
um das Passwort zu verschlüsseln. Sobald Sie getroffen haben [Enter]werden Sie aufgefordert, das Benutzerpasswort einzugeben:
$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin
Weisen Sie dann der Kennwortdatei die richtigen Berechtigungen und Eigentumsrechte zu (ersetzen Sie den Benutzer und die Gruppe nginx durch www Daten auf 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 des Serverblocks) oder ein bestimmtes Verzeichnis oder eine bestimmte Datei einschränken. Um dies zu erreichen, können zwei nützliche Anweisungen verwendet werden:
- auth_basic – Aktiviert die Validierung von Benutzername und Passwort mit dem Befehl „HTTP-Basisauthentifizierung” Protokoll.
- auth_basic_user_file – Gibt die Datei des Berechtigungsnachweises an.
Als Beispiel zeigen wir, wie Sie das Verzeichnis mit einem Passwort schützen / var / www / html / protected.
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 jetzt die Änderungen und starten Sie den Nginx-Dienst neu.
$ sudo systemctl restart nginx
Wenn Sie das nächste Mal Ihren Browser auf das oben genannte Verzeichnis verweisen (http: // localhost / protected) Sie werden aufgefordert, Ihre Anmeldeinformationen (Benutzername) einzugeben Administrator und das gewählte Passwort).
Bei einer erfolgreichen Anmeldung können Sie auf den Inhalt des Verzeichnisses zugreifen, andernfalls erhalten Sie aa “401 Autorisierung erforderlich” Error.
So richten Sie namensbasierte virtuelle Hosts (Serverblöcke) in Nginx ein
Der Serverkontext ermöglicht das Speichern und Bereitstellen mehrerer Domänen / Standorte auf derselben physischen Maschine oder auf demselben virtuellen privaten Server (Virtual Private Server, VPS). Für jede Site / Domäne können im http-Kontext mehrere Serverblöcke (die virtuelle Hosts darstellen) deklariert werden. Nginx entscheidet anhand des empfangenen Anforderungsheaders, welcher Server eine Anforderung verarbeitet.
Wir werden dieses Konzept anhand der folgenden Dummy-Domänen demonstrieren, die sich jeweils im angegebenen Verzeichnis befinden:
- wearetecmint.com – /var/www/html/wearetecmint.com/
- welovelinux.com – /var/www/html/welovelinux.com/
Weisen Sie als Nächstes die entsprechenden Berechtigungen für das Verzeichnis für jede Site zu.
$ sudo chmod -R 755 /var/www/html/wearetecmint.com/public_html $ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html
Erstellen Sie nun ein Beispiel index.html Datei in jedem public_html Verzeichnis.
www.wearetecmint.com This is the index page of www.wearetecmint.com
Erstellen Sie als Nächstes die Serverblock-Konfigurationsdateien für jeden Standort innerhalb der /etc/httpd/conf.d Verzeichnis.
$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf $ sudo vi /etc/nginx/conf.d/welovelinux.com.conf
Fügen Sie die folgende Serverblockdeklaration in das Feld ein wearetecmint.com.conf Datei.
server { listen 80; server_name wearetecmint.com; root /var/www/html/wearetecmint.com/public_html ; index index.html; location / { try_files $uri $uri/ =404; } }
Fügen Sie als Nächstes die folgende Serverblockdeklaration in das Feld ein welovelinux.com.conf Datei.
server { listen 80; server_name welovelinux.com; root /var/www/html/welovelinux.com/public_html; index index.html; location / { try_files $uri $uri/ =404; } }
Starten Sie den Nginx-Webserver neu, um die letzten Änderungen zu übernehmen.
$ sudo systemctl restart nginx
Wenn Sie Ihren Webserver auf die oben genannten Adressen verweisen, werden die Hauptseiten der Dummy-Domänen angezeigt.
http://wearetecmint.com http://welovelinux.com
Wichtig: Wenn Sie haben SELinux Wenn diese Option aktiviert ist, kann Nginx in der Standardkonfiguration nicht auf Dateien außerhalb bekannter autorisierter Speicherorte zugreifen (z / etc / nginx für Konfigurationen, / var / log / nginx für Protokolle, / Var / www / html für Webdateien etc ..).
Sie können dies tun, indem Sie entweder SELinux deaktivieren oder den richtigen Sicherheitskontext festlegen. Weitere Informationen finden Sie in diesem Handbuch: mit Nginx und Nginx Plus mit SELinux auf der Nginx Plus-Website.
So installieren und konfigurieren Sie SSL mit Nginx
SSL Zertifikate helfen dabei, sicheres http zu aktivieren (HTTPS) auf Ihrer Site. Dies ist wichtig, um eine vertrauenswürdige / sichere Verbindung zwischen den Endbenutzern und Ihrem Server herzustellen, indem Sie die Informationen verschlüsseln, die an, von oder innerhalb Ihrer Site übertragen werden.
Wir werden beschreiben, wie Sie ein selbstsigniertes Zertifikat erstellen und installieren und eine Zertifikatsignierungsanforderung generieren (CSR) ein SSL-Zertifikat von einer Zertifizierungsstelle zu erwerben (DAS), zur Verwendung mit Nginx.
Selbstsignierte Zertifikate können kostenlos erstellt werden und eignen sich praktisch für Testzwecke und für interne LAN-Dienste. Für öffentlich zugängliche Server wird dringend empfohlen, ein von einer Zertifizierungsstelle ausgestelltes Zertifikat (z. B. Let’s Encrypt) 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 openssl Befehlszeilen-Tool.
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt
Lassen Sie uns kurz die im obigen Befehl verwendeten Optionen beschreiben:
- req -X509 – zeigt, dass wir ein x509-Zertifikat erstellen.
- -Knoten (NO DES) – bedeutet “Schlüssel nicht verschlüsseln”.
- -Tage 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 soll.
- -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 Ihre Konfigurationsdatei für den virtuellen Host und fügen Sie die folgenden Zeilen zu einer Serverblockdeklaration hinzu, die den Port überwacht 443. Wir werden mit der virtuellen Host-Datei testen /etc/nginx/conf.d/wearetecmint.com.conf.
$ sudo vi /etc/nginx/conf.d/wearetecmint.com.conf
Fügen Sie dann die SSL-Direktive zur Nginx-Konfigurationsdatei hinzu. Sie sollte ähnlich 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 wearetecmint.com; root /var/www/html/wearetecmint.com/public_html; index index.html; location / { try_files $uri $uri/ =404; } }
Starten Sie nun den Nginx neu und zeigen Sie mit Ihrem Browser auf die folgende Adresse.
https://www.wearetecmint.com
Wenn Sie ein SSL-Zertifikat von einer Zertifizierungsstelle erwerben möchten, müssen Sie wie gezeigt eine Zertifikatsignierungsanforderung (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
Dann müssen Sie die senden CSR das wird zu einem generiert DAS um die Ausstellung eines 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 von Nginx Web Server
Zusammenfassung
In diesem Artikel haben wir erklärt, wie Nginx installiert und konfiguriert wird. Hier erfahren Sie, wie Sie ein namenbasiertes virtuelles Hosting mit SSL einrichten, um die Datenübertragung 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 erreichen.