Erstellen Sie virtuelle Hosts, Kennwortschutzverzeichnisse und SSL -Zertifikate mit Nginx Web Server unter Arch Linux

Erstellen Sie virtuelle Hosts, Kennwortschutzverzeichnisse und SSL -Zertifikate mit Nginx Web Server unter Arch Linux

Der vorherige Artikel von Arch Linux 'LEMP' umfasste nur grundlegende Dinge, aus der Installation von Netzwerkdiensten (Nginx, MySQL -Datenbank und PhpMyAdmin) und konfigurieren Sie minimale Sicherheit, die für MySQL Server und PHPMYADMIN erforderlich sind.

Nützliche Nginx -Konfigurationen unter Arch Linux

Dieses Thema ist streng mit der früheren Installation von LEMP unter Arch Linux zusammenhängt und führt Sie durch die Einstellung komplexerer Konfigurationen für LEMP Stack, insbesondere für LEMP Stack Nginx Webserverkonfigurationen wie das Erstellen Virtuelle Hosts, verwenden Passwort geschützte Verzeichnisse, Erstellen und konfigurieren HTTP Secure Sockets Layer, Http iNecure lenkte auf Https und präsentieren Sie Ihnen auch einige nützliche Bash -Skripte, die den Auftrag bei der Aktivierung virtueller Hosts erleichtern und generieren SSL -Zertifikat und Schlüssel.

Anforderungen

Installieren Sie LEMP mit der MariADB -Datenbank unter Arch Linux

Schritt 1: Aktivieren Sie virtuelle Hosts auf nginx

Eine der einfachsten Methoden zu aktivieren Virtuelle Hosts benutzt enthalten Anweisungen zur Hauptnginx -Konfigurationsdatei, mit der weitere Konfigurationen einfacher und effizienter und effizienter werden, da Sie einfache Dateien für jeden neuen Host erstellen und die Hauptkonfigurationsdatei sauberer halten können.

Dieser Ansatz funktioniert genauso wie auf Apache -Webserver, Das erste, was Sie tun müssen, ist, das neue anzugeben Uri Pfad, wo Nginx Dateianweisungen lesen sollte.

1. Also offen nginx.Conf Hauptdatei auf /etc/nginx/ Systempfad und unten, vor der letzten lockigen Klammer “”Fügen Sie den Pfad hinzu, in dem sich zukünftige virtuelle Host -Konfigurationsdateien befinden.

$ sudo nano/etc/nginx/nginx.Conf

Unten addieren Sie die folgende Erklärung.

Include/etc/nginx/sites-fähig/*.conf;
Aktivieren Sie virtuelle Hosts auf nginx

Diese Richtlinie sagt Nginx, sie sollte alle Dateien lesen, die in gefunden werden /etc/nginx/sites-fähig/ das endet mit a .Conf Verlängerung.

2. Der nächste Schritt ist das Erstellen Websites fähig Verzeichnis und ein anderer, genannt Standorte verfügbar, Wo Sie alle Ihre virtuellen Hosts -Konfigurationsdateien speichern.

$ sudo mkdir/etc/nginx/sites-verfügbar

3. Jetzt ist es Zeit, einen neuen virtuellen Host zu erstellen. In diesem Beispiel wird die System -IP -Adresse als virtuellen Hostnamen verwendet. Erstellen Sie daher eine neue Datei mit dem Namen Name-ip.Conf.

sudo nano/etc/nginx/sites-verfügbare/name-ip.Conf

Fügen Sie den folgenden Inhalt hinzu.

## Dateiinhalt ## Server Listen 80; Server_Name 192.168.1.33; Access_log/var/log/nginx/192.168.1.33.Zugang.Protokoll; ERROR_LOG/VAR/LOG/NGINX/192.168.1.33.Fehler.Protokoll; root /srv /http; Ort / Indexindex.HTML -Index.HTM -Index.PHP; autoIndex auf; autoIndex_exact_size off; autoIndex_localtime on;  location /phpmyadmin rewrite ^ /* /phpmyadmin letztes;  Ort ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Abhängig von Ihrer PHP-FPM-Socket-Konfiguration) FASTCGI_PASS UNIX:/Run/PHP-FPM/PHP-FPM.Socke; FASTCGI_INDEX INDEX.PHP; Fastcgi einschließen.conf; 
Erstellen Sie einen neuen virtuellen Host

Die Richtlinie, die den virtuellen Host aktiviert, ist Servername Erklärung unter Höranschluss. Eine weitere wichtige Richtlinie hier ist auch Wurzel Anweisung, dass nginx virtueller Host zum Servieren von Dateiinhalten aus /srv/http/ Systempfad.

4. Der letzte Schritt ist zu erstellen /srv/http/ Verzeichnis und machen Name-ip.Conf Dateikonfiguration für NGINX -Lesen verfügbar (mit symbolischer Link) und dann Dämon neu starten, um neue Konfigurationen sichtbar zu gestalten.

$ sudo mkdir/srv/http/$ sudo ln-s/etc/nginx/sites-verfügbar/name-ip.conf/etc/nginx/sites-fähig/$ sudo systemctl neu starten nginx
Starten Sie den Nginx -Webserver

5. Um dies zu überprüfen, weisen Sie Ihren Browser auf die IP -Adresse des Bogensystems an und Sie sollten feststellen, dass sich der Webinhalt von unterschiedlich unterscheidet von http: // localhost. Hier habe ich ein kleines PHP -Skript hinzugefügt, das auch überprüft FASTCGI PHP Konfigurationen wie im Screenshot unten.

$ sudo nano/srv/http/Info.Php
## Dateiinhalt ## 
Überprüfen Sie die FASTCGI -PHP -Konfigurationen

6. Eine andere Methode, die ich selbst entwickelt habe, um virtuelle Hosts auf Nginx zu aktivieren oder zu deaktivieren, ist eleganter und ist von Apache inspiriert a2eniste Skript.

Um diese Methode zu verwenden, öffnen Sie einen Datei -Editor und erstellen Sie eine neue Datei mit dem Namen N2ensit, auf Ihrem $ Home Pfad mit dem folgenden Inhalt, machen Sie es ausführbar, führen Sie es mit Root -Berechtigungen aus und geben Sie als Option an Ihren neuen virtuellen Hostnamen ohne übergeben .Conf Ende (Füllen Sie frei, um es entsprechend Ihren Anforderungen zu ändern).

$ sudo nano n2ensit
## Dateiinhalt ## #!/bin/bash if test -d/etc/nginx/sites -verfügbar && test -d/etc/nginx/sites -fähig; dann echo "------------------------------------------- "else mkdir/etc/nginx/sites-verfügbare mkdir/etc/nginx/sites-fähig fi verfügbar.Confabteabled =/etc/nginx/sites-fähig/site = "ls/etc/nginx/sites-verfügbare/" if ["$#" != "1"]; dann echo "Skript verwenden: n2ensit virtual_sit" echo -e "\ navilable virtuelle Hosts: \ n $ site" beenden 0 sonst wenn test -e $ verfügbar; dann sudo ln -s $ verfügbar $ aktiv! Bitte erstellen Sie einen!\ n $ Site "0 fi, wenn test -e $ aktiviert/$ 1.conf; dann echo "Erfolg"!! Starten Sie nun Nginx Server neu:!\ nPlease Siehe verfügbare virtuelle Hosts: \ n $ Site "Beenden Sie 0 fi fi
Verwenden Sie A2eniste -Skript

Machen Sie es ausführbar und führen Sie es als Show aus.

$ sudo chmod +x n2ensit $ sudo ./n2ensit your_virtual_host
Aktivieren Sie den virtuellen Host

7. Um virtuelle Hosts zu deaktivieren, erstellen Sie eine neue N2dissit Datei mit den folgenden Inhalten und die gleichen Einstellungen wie oben anwenden.

$ sudo nano n2dissite
## Dateiinhalt ## #!/bin/bash averle =/etc/nginx/sites-fähig/$ 1.Confabteabled =/etc/nginx/sites-fähige Site = "ls/etc/nginx/sites-fähig/" if ["$#" != "1"]; dann echo "Skript verwenden: n2dissit virtual_sit" echo -e "\ navilable virtuelle Hosts: \ n $ site" beenden 0 sonst wenn test -e $ verfügbar; dann sudo rm $ vel echo -e -e "$ virtual Host existiert nicht! Ausgehen!"Beenden Sie 0 fi, wenn test -e $ aktiviert/$ 1.conf; dann echo "Fehler"!! Konnte $ virtual Host nicht entfernen!"sonst echo -e" Erfolg! $ Ulfil wurde entfernt!\ nPlease neu starten nginx: sudo systemctl neu starten nginx "exit 0 fi fi
Deaktivieren Sie virtuelle Hosts

8. Jetzt können Sie diese beiden Skripte verwenden, um einen virtuellen Host zu aktivieren oder zu deaktivieren. Wenn Sie ihn jedoch als systemweite Befehle anwenden möchten /usr/local/bin/ Und dann können Sie es verwenden, ohne den Pfad anzugeben.

$ sudo cp n2ensit n2dissit/usr/local/bin/
Verwenden Sie das N2ensit -Skript, um Hosts zu aktivieren oder zu deaktivieren

Schritt 2: Aktivieren Sie SSL mit virtuellen Hosts auf nginx

SSL (Sichern Sie die Steckdosen) ist ein Protokoll, mit dem HTTP -Verbindungen über Netzwerke oder Internet verschlüsselt werden können. Dadurch wird der Datenfluss über einen sicheren Kanal mit symmetrischen/asymmetrischen Kryptographieschlüssel übertragen und wird von OpenSSL -Paket in Arch Linux zur Verfügung gestellt.

$ sudo pacman -S OpenSSL
Installieren Sie das OpenSSL -Paket

9. Um HTTPS -Verbindungen mit Nginx zu aktivieren. Um die Dinge zu vereinfachen, habe ich kleine Skripte entwickelt, die automatisch kryptografische Schlüssel generieren /etc/nginx/ssl Verzeichnispfad unter Verwendung der Namensnamen des virtuellen Hosts als Schlüsselnamen.

Erstellen Sie eine Datei mit dem Namen nginx_gen_ssl und fügen Sie den folgenden Inhalt hinzu.

$ sudo nano nginx_gen_ssl
## Dateiinhalt ## #!/bin/bash mkdir/etc/nginx/ssl CD/etc/nginx/ssl echo -e "Geben Sie Ihren virtuellen Host FQDN: \ nThis ein!"Read Cert OpenSSL Genpkey -Algorithmus RSA -pkeyopt RSA_KeyGen_Bits: 2048 -out $ cert cert.Key CHMOD 600 $ cert.Key OpenSSL Req -New -key $ cert.Key -out $ cert.CSR OpenSSL X509 -REQ -Days 365 -in $ cert.CSR -Signkey $ cert.Key -out $ cert.CRT Echo -e "Das Zertifikat $ $ cert wurde generiert!\ nPlease Link es mit Nginx SSL verfügbare Website!"ls -all/etc/nginx/ssl exit 0
Generieren Sie virtuelle Hostsschlüssel

10. Nachdem das Skript erstellt wurde, wurden die Berechtigungen von Append Execution ausführen, führen Sie es aus und geben Sie Ihre Zertifikatoptionen an, was das wichtigste ist Gemeinsamen Namen Feld (fügen Sie hier den offiziellen Domainnamen hinzu) und hinterlassen Sie Passwort und optionale Firmenfelder leer.

$ sudo chmod +x nginx_gen_ssl $ sudo ./nginx_gen_ssl
Set Execute -Berechtigungen Generieren Sie SSL -Tasten

Am Ende der Tastenerzeugung wird eine Auflistung mit allen verfügbaren Schlüssel unter Nginx SSL -Verzeichnis angezeigt.

Listen Sie alle verfügbaren Schlüssel auf

Auch wenn Sie dieses Skript als Systembefehl verwendet werden möchten, kopieren Sie es oder verschieben Sie es auf /usr/local/bin/.

$ sudo mv nginx_gen_ssl/usr/local/bin

11. Nachdem wir Tasten generiert haben, die für den virtuellen Nginx -SSL -Host erforderlich sind, ist es an der Zeit, tatsächlich SSL Virtual Host -Konfigurationsdatei zu erstellen. Verwenden Sie dieselbe System -IP -Adresse für den virtuellen Host wie oben auf Servername Richtlinie, ändern Sie jedoch den Namen der virtuellen Host -Dateinamen, indem Sie SSL zuvor anhängen .Conf, um Sie daran zu erinnern, dass diese Datei steht Name-ip SSL Virtual Host.

$ sudo nano/etc/nginx/sites-availabe/name-ip-ssl.Conf

In dieser Dateiänderung Hören Portanweisung an 443 SSL und Geben Sie SSL- und Zertifikatschlüsseldateien mit denen an, die zuvor erstellt wurden, um wie im folgenden Auszug auszusehen.

## Dateiinhalt ## Server Hören 443 SSL; Server_Name 192.168.1.33; ssl_certificate/etc/nginx/ssl/192.168.1.33.CRT; ssl_certificate_key/etc/nginx/ssl/192.168.1.33.Taste; SSL_Session_Cache Shared: SSL: 1M; ssl_session_timeout 5m; SSL_CIPHERS hoch:!Anull:!MD5; ssl_prefer_server_ciphers on; Access_log/var/log/nginx/192.168.1.33-SSL.Zugang.Protokoll; ERROR_LOG/VAR/LOG/NGINX/192.168.1.33-SSL.Fehler.Protokoll; root /srv /http; Ort / Indexindex.HTML -Index.HTM -Index.PHP; autoIndex auf; autoIndex_exact_size off; autoIndex_localtime on;  location /phpmyadmin rewrite ^ /* /phpmyadmin letztes;  Ort ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Abhängig von Ihrer PHP-FPM-Socket-Konfiguration) FASTCGI_PASS UNIX:/Run/PHP-FPM/PHP-FPM.Socke; FASTCGI_INDEX INDEX.PHP; Fastcgi einschließen.conf; 
Erstellen Sie virtuelle SSL -Hosts

12. Nachdem die Datei erstellt wurde N2ensit Skript oder ln Befehlszeile zum Aktivieren (erstellt eine symbolische Datei in der Datei in Websites fähig Verzeichnis) und starten Sie den Nginx -Daemon neu, um Einstellungen anzuwenden.

$ sudo ./n2ensit name-ip-ssl oder $ sudo ln-s/etc/nginx/seiten-verfügbar/name-ip-ssl.conf/etc/nginx/sites-fähig/$ sudo systemctl neu starten nginx
Aktive virtuelle SSL -Hosts

13. Zeigen Sie Ihren Browser erneut auf Bogen -IP -URL Aber diesmal mit dem HTTPS -Protokoll - https: // 192.168.1.33 auf meinem System und a Verbindung nicht vertrauen Sicherheitsfehler sollte angezeigt werden ( Fügen Sie die Sicherheitsausnahme hinzu und bestätigen Sie weiter auf Seite gehen).

Überprüfen Sie die HTTPS -Verbindung Überprüfen Sie den Inhalt des virtuellen Hosts Überprüfen Sie die PHP -Konfiguration

Wie Sie jetzt sehen können, dass Ihr virtueller Nginx -Host den gleichen Inhalt wie zuvor bedient Name-ip Host, aber diesmal mit einer HTTP sicheren Verbindung.

Schritt 3: Greifen Sie durch einen virtuellen Host auf phpmyadmin zu

Wenn der virtuelle Host auf Nginx aktiviert ist, haben wir keinen Zugriff mehr auf http: // localhost Pfadinhalte (localhost serviert normalerweise Inhalte mithilfe der IP -Adresse oder der System -IP -Adresse, falls dies nicht sonst konfiguriert ist), da wir Arch -System -IP als verwendet haben Servername Unser Inhaltspfad hat sich also geändert.

14. Die einfachste Methode, um Zugriff auf zu erhalten Phpmyadmin Durch das Web soll eine symbolische Verbindung zwischen erstellen /usr/share/webapps/phpmyadmin// Pfad und unser neuer definierter virtueller Hostpfad (/srv/http).

$ sudo ln -s/usr/share/webapps/phpmyadmin//srv/http/

15. Nachdem Sie den obigen Befehl ausgeführt haben, aktualisieren Sie Ihre Seite und Sie werden sehen, wie ein neuer Ordner phpmyadmin angezeigt wird, wenn AutoIndex Anweisung aktiviert auf Nginx Virtual Host oder richten Sie Ihre URL direkt in den Ordner phpmyadmin hin https: // arch_ip/phpmyadmin.

16. Wenn Sie die PhpMyAdmin -Zeichenfolge auf dem Browser abhören möchten, bearbeiten Sie Ihre virtuellen Hosts -Dateien und fügen Sie den folgenden Inhalt unter Server -Block hinzu.

Ort /phpmyadmin rewrite ^ /* /phpmyadmin last; 
Greifen Sie über einen virtuellen Host auf PhpMyAdmin zu

Schritt 4: Aktivieren Sie das passwortgeschützte Verzeichnis auf nginx

Im Gegensatz zu Apache verwendet Nginx HttpAuthbasic Modul zu aktivieren Passwort geschützte Verzeichnisse Bietet jedoch keine Tools, um ein verschlüsseltes Erstellen zu erstellen .htpasswd Datei.

17. Um den Verzeichniskennwortschutz mit Nginx auf Arch Linux zu erreichen, installieren Sie Apache Web Server und verwenden Sie seine Tools, um ein verschlüsseltes zu generieren .htaccess Datei.

$ sudo pacman -s Apache

18. Nachdem Sie Apache installiert haben, erstellen Sie ein neues Verzeichnis unter /etc/nginx/ Intuitiv genannt, wohin .htpasswd Die Datei wird gespeichert und verwendet htpasswd Befehl mit -C Wechseln Sie zuerst Benutzer ein, um eine Datei zu generieren. Wenn Sie weitere Benutzer verwenden möchten, können Sie mehr Benutzer hinzufügen htpasswd ohne -C schalten.

$ sudo mkdir/etc/nginx/passwd $ sudo htpasswd -c/etc/nginx/passwd/.htpasswd first_user $ sudo htpasswd/etc/nginx/passwd/.Htpasswd Second_User $ sudo htpasswd/etc/nginx/passwd/.htpasswd dritter_user
Aktivieren Sie das passwortgeschützte Verzeichnis

19. Um zu schützen NAME-IP-SSL Virtuelle Host -Root /srv/http/ Serve Pfad mit all seinen Subordnern und Dateien darunter die folgenden Anweisungen in Ihrem virtuellen Host -Server -Block unter Root Directive und verweisen Sie auf Absolute .htpasswd Dateipfad.

auth_basic "eingeschränkte Website"; auth_basic_user_file/etc/nginx/passwd/.htpasswd;
Eingeschränkte Website -Konfiguration

20. Nach dem Neustart des Nginx -Dienstes, aktualisieren Sie die Seite und eine Authentifizierung erforderlich Popup sollte für Ihre Anmeldeinformationen anspruchsvoll erscheinen.

Authentifizierung erforderlich

Jetzt haben Sie Nginx erfolgreich aktiviert Passwort geschützte Verzeichnisse Beachten Sie jedoch, dass in Ihrem System gleichzeitig Apache -Webserver installiert ist. Stellen Sie also sicher, dass es deaktiviert bleibt und auf jeden Fall nicht starten kann.

Schritt 5: Http auf https auf nginx umleiten

21. Wenn Sie möchten, dass Browser alle unsicheren HTTP -Anfragen automatisch um das HTTPS -Protokoll öffnen und bearbeiten Sie Sie Nicht-SSL Virtueller Host und fügen Sie die folgende Anweisung unter hinzu Servername Richtlinie.

Schreiben Sie ^ https: // $ server_name $ request_uri neu? dauerhaft;
HTTP auf HTTPS umleiten

Alle Einstellungen, die in diesem Artikel vorgestellt wurden, in einem unter einem gemacht Arch Linux System, das als Server fungiert, aber die meisten von ihnen, insbesondere solche in Bezug auf Nginx -Konfigurationsdateien.