GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Installieren Sie Nginx mit PHP und MySQL (LEMP) plus SSL unter Debian 10

LEMP ist ein Akronym, das für den folgenden Software-Stack steht:Linux Kernel, Nginx Webserver, MariaDB Datenbank (oder MySQL ) und das PHP serverseitige Programmiersprache. Diese Software wird heute häufig auf Servern im Internet verwendet, um dynamische Websites oder interaktive Webanwendungen bereitzustellen.

Nginx ist ein moderner und ressourcenschonender Webserver, der aktiv weiterentwickelt wird und nach dem Apache HTTP-Server der am zweithäufigsten verwendete Webserver im Internet ist. Es ist besonders schnell, weil es einen asynchronen, ereignisgesteuerten Ansatz zur Verarbeitung von Anfragen verwendet.

Dieses Tutorial zeigt Ihnen, wie Sie den LEMP-Stack (Nginx mit MariaDB und PHP 7) auf der neuesten Version von Debian 10 installieren und konfigurieren.

ANFORDERUNGEN

  • Die neueste Version des Betriebssystems Debian 10, die unter folgendem Link bezogen werden kann https://www.debian.org/CD/http-ftp/, von Grund auf auf einem VPS, einer virtuellen Maschine oder direkt auf installiert eine eigens dafür vorgesehene Maschine.
  • Direkter Zugriff auf die Serverkonsole oder eine Remote-SSH-Verbindung.
  • Eine Netzwerkschnittstelle, die mit einer statischen IP-Adresse für den Computer konfiguriert ist
  • Ein registrierter öffentlicher Domainname mit A- und CNAME (www)-DNS-Einträgen, die auf der Seite des Nameservers konfiguriert sind. In diesem Leitfaden verwenden wir die Domain example.com als Beispiel.

Schritt 1:Erstkonfiguration

Der erste Schritt besteht darin, sich als Root oder mit einem Benutzer mit Root-Rechten in Ihrem System anzumelden und Debian 10-Komponenten (Kernel-Upgrades, Paket-Updates und Sicherheits-Patches) zu aktualisieren, indem Sie die folgenden Befehle ausführen.

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Als Nächstes stellen Sie sicher, dass Sie einen beschreibenden Namen für den Hostnamen Ihres Computers hinzufügen, indem Sie den folgenden Befehl ausführen. Anschließend sollten Sie das System neu starten, um den neuen Hostnamen entsprechend zu übernehmen.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Installieren Sie als Nächstes die Dienstprogramme wget, curl und bash-completion von net-tools, um sie später zur einfachen Verwaltung Ihres Debian-Servers zu verwenden.

sudo apt install net-tools sudo wget curl bash-completion

Schritt 2:Installieren Sie den Nginx-Webserver

Nginx ist ein moderner und ressourcenschonender Webserver, mit dem Webseiten Besuchern im Internet angezeigt werden. Installieren Sie den Nginx-Webserver aus dem Debian 10-Repository, indem Sie den folgenden Befehl in der Konsole Ihres Servers ausführen.

sudo apt-get install nginx

Wie im obigen Bild gezeigt, prüft der apt-Paketmanager zusätzliche Abhängigkeiten für das Paket und fragt Sie, ob Sie damit einverstanden sind, mit dem Installationsvorgang fortzufahren. Antworten Sie mit ja (y ), um Nginx zu installieren.

Führen Sie als Nächstes netstat aus Befehl, um Netzwerk-Sockets auf Ihrem System anzuzeigen und zu überprüfen, ob der nginx-Daemon auf Port 80/TCP lauscht. Alternativ können Sie systemctl ausgeben Befehl, um den Status des nginx-Daemons zu überprüfen, wie im folgenden Bild dargestellt.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

Sobald der nginx-Server in Ihrem System eingerichtet ist und ausgeführt wird, geben Sie ifconfig aus Befehl, um Informationen zu Netzwerkschnittstellen anzuzeigen und die IP-Adressen Ihres Computers aufzulisten. Öffnen Sie dann einen Browser und besuchen Sie die Nginx-Standardwebseite über das HTTP-Protokoll, indem Sie die IP-Adresse in Ihrem Browser hinzufügen. Die Nachricht „Willkommen bei Nginx!“ sollte in Ihrem Browserfenster angezeigt werden.

http://www.example.com

oder

http://192.168.0.100

Schritt 3:Nginx HTTP/2.0-Protokoll aktivieren

Standardmäßig werden die neuesten Versionen der Nginx-Binärdateien, die von den Debian 10-Repositories bereitgestellt werden, mit dem HTTP/2.0-Protokoll erstellt. HTTP/2.0 ist in TSL/SSL-Protokolle integriert und kann die Ladegeschwindigkeit von Webseiten über gesicherte Transaktionen verbessern.

Alle modernen Browser wie Chrome oder Firefox sollten dieses Protokoll standardmäßig unterstützen. Beachten Sie jedoch, dass die Browser Microsoft Internet Explorer und Microsoft Edge das http2-Protokoll noch nicht parsen können.

Um das HTTP/2.0-Protokoll in Nginx unter Debian 10 zu aktivieren, müssen Sie einige Änderungen an der standardmäßigen Nginx-Konfigurationsdatei vornehmen oder eine neue Konfigurationsdatei erstellen und den TLS-Codeblock für 443-Server hinzufügen. Um dies zu erreichen, erstellen Sie zunächst eine Sicherung der standardmäßigen Nginx-Sites-Available-Konfiguration, indem Sie den folgenden Befehl ausführen. Bestätigen Sie, dass die Sicherung erfolgreich war, indem Sie den Inhalt des Verzeichnisses „sites-available“ auflisten.

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Erstellen Sie als Nächstes eine Nginx-TLS-Konfigurationsdatei mit einem Texteditor und fügen Sie den folgenden Inhalt hinzu.

sudo nano /etc/nginx/sites-available/default-ssl

default-ssl Dateiauszug:

    server {
                listen 443 ssl http2 default_server;
                listen [::]:443 ssl http2 default_server;
                #server_name  www.domain.tld;
                server_name _;
                                
                root /var/www/html;
                                
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                
                #SSL Certificates
                ssl_certificate "/etc/nginx/ssl/cert.pem";
                ssl_certificate_key "/etc/nginx/ssl/privekey.pem";
                ssl_dhparam /etc/nginx/ssl/dhparam.pem;
                
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                #ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
 
                ssl_session_cache shared:SSL:1m;
                ssl_session_timeout 10m;
                ssl_ciphers HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;
               
                add_header Strict-Transport-Security "max-age=31536000;
                #includeSubDomains" always;
 
                location / {
                index index.php index.html index.htm;
                    try_files $uri $uri/ /index.php?$args $uri/ =404;
                }
 
                                set $cache_uri $request_uri;
                
                location ~ /.well-known {
                allow all;
                               }
               location ~ \.php$ {
                                include snippets/fastcgi-php.conf;
                #
                #             # With php-fpm (or other unix sockets):
                              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                #             # With php-cgi (or other tcp sockets):
                #             fastcgi_pass 127.0.0.1:9000;
                }
 
                # deny access to .htaccess files, if Apache's document root
                # concurs with nginx's one
                #
                #location ~ /\.ht {
                #             deny all;
                #}
                   }

Die Anweisung, die die Verwendung des HTTP/2.0-Protokolls ermöglicht, wird durch das Wort http2 dargestellt aus der unteren Zeile.

 listen 443 ssl http2 default_server;

Falls die Browser Ihrer Besucher das HTTP2-Protokoll nicht unterstützen, entfernen Sie das http2 word aus Ihren Serverkonfigurationen, um das Protokoll zu deaktivieren und den Nginx-Dienst neu zu starten, um die Änderungen zu übernehmen.

Falls Sie eine registrierte Domain haben oder virtuelles Hosting auf der Grundlage von IP-Adressen verwenden, sollten Sie Ihren Domainnamen oder Ihre IP-Adresse nach server_name hinzufügen Direktive, wie im folgenden Beispiel gezeigt.

server_name www.example.com example.com;

Sobald Sie mit der Bearbeitung der Nginx-Standardkonfigurationsdatei mit den obigen Einstellungen fertig sind

SSL in Nginx konfigurieren

In der obigen TSL-Konfigurationsdatei von nginx haben wir den Pfad für das TLS-Zertifikat und den Schlüssel angegeben. Da wir die Schlüssel noch nicht in Ihrem System installiert haben, geben Sie den folgenden Befehl ein, um die selbstsignierte SSL-Zertifikatsdatei und den Schlüssel zu generieren. Während der Generierung des SSL-Zertifikats werden Ihnen eine Reihe von Fragen gestellt. Geben Sie den zweistelligen Code für Ihr Land, Bundesland oder Ihre Provinz, den Namen Ihrer Stadt, den Namen Ihrer Organisation, den Namen der Einheit Ihrer Organisation, den allgemeinen Namen Ihres Servers und eine gültige E-Mail-Adresse ein. Sie sollten sicherstellen, dass der Common Name so eingestellt ist, dass er mit dem FQDN-Eintrag Ihres Computers vom DNS-Server oder der IP-Adresse Ihres Servers übereinstimmt, die für den Zugriff auf die Website verwendet wird. Das Zertifikat und der Schlüssel werden in einem neuen Verzeichnis unter dem nginx-Verzeichnis mit dem Namen ssl gespeichert, wie im folgenden Screenshot gezeigt.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

Generieren Sie außerdem eine neue starke Diffie-Hellman-Chiffre, die Sie in der obigen Konfigurationsdatei unter ssl_dhparam finden Anweisungszeile, indem Sie den folgenden Befehl ausgeben:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Nachdem Sie den Diffie-Hellman-Schlüssel generiert haben, aktivieren Sie schließlich die TLS-Konfigurationsdatei, indem Sie einen symbolischen Link für default-ssl erstellen Konfigurationsdatei von sites-available Verzeichnis zu sites-enabled Verzeichnis, indem Sie den folgenden Befehl ausgeben.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Testen Sie als Nächstes die Nginx-Konfigurationsdatei auf Syntaxfehler und starten Sie den Nginx-Daemon neu, wenn alles in Ordnung ist, um alle Änderungen zu übernehmen, indem Sie die folgenden Befehle ausführen.

sudo nginx -t
sudo systemctl restart nginx.service

Überprüfen Sie, ob die SSL-Konfiguration erfolgreich war

Um zu bestätigen, ob der Nginx-Webserver an den SSL-Port gebunden ist, führen Sie den Befehl netstat aus und prüfen Sie, ob Port 443 im Abhörmodus angezeigt wird.

netstat -tlpn | grep nginx

Der folgende Screenshot veranschaulicht die obigen Schritte.

Navigieren Sie dann über das HTTP-Protokoll von einem Browser zu Ihrem Domainnamen oder der IP-Adresse Ihres Servers, um die nginx-Standardseite anzuzeigen. Da Sie selbstsignierte Zertifikate verwenden, sollte in Ihrem Browser ein Fehler angezeigt werden. Bestätigen Sie den Fehler, um zur Standardhauptseite von nginx zu gelangen.

Falls Nginx keine standardmäßige index.html bereitstellt Seite im Webroot-Verzeichnis geben Sie den folgenden Befehl ein, um die Indexseite zu erstellen.

echo "test page" | tee /var/www/html/index.html

Um das Vorhandensein des von Nginx angekündigten HTTP/2.0-Protokolls zu bestätigen, geben Sie den folgenden Befehl ein. Suchen Sie nach h2 Wort in vom Server angekündigten Protokollen.

 openssl s_client -connect localhost:443 -nextprotoneg ''

Sie können auch den Verbindungsstatus anzeigen und prüfen, ob das http2-Protokoll von Nginx im Chrome-Browser angekündigt wird, indem Sie die Funktionstaste F12 drücken und die Seite anfordern. Um das von der Anfrage verwendete Protokoll anzuzeigen, gehen Sie zur Registerkarte Netzwerk, klicken Sie mit der rechten Maustaste auf das Menü Typ und aktivieren Sie Protokoll abgelegt. Das HTTP2-Protokoll sollte als h2 angezeigt werden in der aktuellen Protokollspalte, wie im folgenden Screenshot dargestellt.

Schritt 4:Installieren Sie PHP 7

Der Nginx-Webserver kann dynamische Webinhalte mit Hilfe des PHP-Programmierspracheninterpreters über den PHP FastCGI-Prozessmanager bereitstellen, an den Nginx die Anforderungen zur Verarbeitung weiterleitet. Den FastCGI-Prozessmanager erhalten Sie, indem Sie php-fpm installieren vorkompiliertes Paket, das von den offiziellen Repositories von Debian 9 angeboten wird.

Um den php-fpm-Prozessmanager und den PHP7.0-Interpreter im System zusammen mit den zusätzlichen Paketen zu installieren, die es PHP ermöglichen, mit dem Nginx-Webserver zu kommunizieren, geben Sie den folgenden Befehl auf Ihrer Serverkonsole ein:

sudo apt install php7.3 php7.3-fpm php7.3-curl php7.3-gd

Starten Sie PHP-FPM

Sobald der PHP 7.3-Interpreter erfolgreich auf Ihrem System installiert wurde, starten und überprüfen Sie den php7.3-fpm-Daemon, indem Sie den folgenden Befehl ausführen:

sudo systemctl start php7.3-fpm
sudo systemctl status php7.3-fpm

In der obigen TLS-Konfigurationsdatei von Nginx haben wir bereits die Blockkonfigurationen für den PHP FastCGI-Prozessmanager hinzugefügt, um dynamische Inhalte bereitzustellen. Der Codeblock, der es Nginx ermöglicht, den PHP-Interpreter zu verwenden, wird im folgenden Auszug gezeigt, sodass keine weiteren Schritte erforderlich sind, um die Nginx TSL-Konfigurationsdatei zu ändern. Das Hashtag-#-Zeichen am Anfang der Zeilen im folgenden Screenshot sind Kommentare. Kommentierte Zeilen aus Konfigurationsdateien werden standardmäßig vom Nginx-Webserver ignoriert.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

PHP-Konfiguration testen

Um zu testen und zu validieren, ob Nginx PHP-Dateien korrekt an den PHP-Prozessor übergeben kann, erstellen Sie eine PHP info.php Testen Sie die Konfigurationsdatei, indem Sie den folgenden Befehl ausführen

sudo su -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

Besuchen Sie dann die php-Infoseite in Ihrem Webbrowser, indem Sie zum Domainnamen oder der öffentlichen IP-Adresse Ihres Servers navigieren, gefolgt von /info.php wie im Bild unten gezeigt.

https://www.example.com/info.php

oder

http://192.168.0.100/info.php

Sie können auch prüfen, ob das HTTP/2.0-Protokoll vom Server angekündigt wird, indem Sie nach der Zeile $_SERVER[‘SERVER_PROTOCOL’] suchen auf PHP-Variablen.

Um andere PHP7.3-Module zu installieren, führen Sie die apt-Suche aus php7.3 Befehl, um ein bestimmtes PHP-Modul zu finden und zu installieren. Wenn Sie vorhaben, ein Content-Management-System wie WordPress zu installieren, installieren Sie diese zusätzlichen Module:

sudo apt install php7.3-mcrypt php7.3-mbstring

Die neu installierten PHP-Module sind jedoch standardmäßig nicht auf Ihrem System aktiviert. Um sie zu aktivieren, starten Sie den PHP-FPM-Dienst neu.

sudo systemctl restart php7.3-fpm.service

Schritt 5:MariaDB-Datenbank installieren

Schließlich fehlt das letzte Stück des LAMP-Stack-Puzzles in der Datenbank. Die LEMP-Komponente der MariaDB-Datenbank wird zum Speichern von Datensätzen in Tabellen und Spalten verwendet. Es wird die Daten einer Webanwendung dynamisch verwalten. Um die MariaDB zu installieren, führen Sie den folgenden Befehl in der Konsole Ihres Servers aus. Starten Sie dann den PHP-FPM-Daemon neu, um das PHP-MySQL-Modul zu aktivieren, das für den Zugriff auf die Datenbank erforderlich ist.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

Standardmäßig können das System-Root-Konto oder Benutzer mit Root-Rechten auf die Datenbank zugreifen, ohne ein Kennwort anzugeben. Um dieses Verhalten so zu ändern, dass MySQL jedes Mal, wenn ein Systembenutzer versucht, auf die Datenbank zuzugreifen, zur Eingabe eines Passworts auffordert, melden Sie sich über die Befehlszeilenschnittstelle mit Root-Rechten bei der MySQL-Datenbank an und führen Sie die folgenden Befehle in der MySQL-Konsole aus:

sudo mysql
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> exit

Root-Passwort in MariaDB festlegen

Stellen Sie im nächsten Schritt sicher, dass Sie MariaDB sichern, indem Sie das Sicherheitsskript mysql_secure_installation. Es wird vom Installationspaket aus den Debian-Repositories bereitgestellt. Während der Ausführung stellt das Skript eine Reihe von Fragen, die zum Schutz der MariaDB-Datenbank entwickelt wurden. Zum Beispiel:Ändern des MySQL-Root-Passworts, Entfernen anonymer Benutzer, Deaktivieren von Remote-Root-Logins und Löschen der Testdatenbank. Führen Sie das Skript aus, indem Sie den folgenden Befehl ausführen. Beantworten Sie alle gestellten Fragen mit Ja, um den MySQL-Daemon vollständig zu sichern. Verwenden Sie die folgende Skriptausgabe außer als Richtlinie.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Um die MariaDB-Funktionalität zu testen, melden Sie sich schließlich über die Konsole bei der Datenbank an und führen Sie den folgenden Befehl aus. Eine Liste der Standarddatenbanken sollte in der MariaDB-Konsole angezeigt werden. Verlassen Sie die MariaDB-Konsole mit exit Aussage.

mysql -u root –p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

Das ist alles! Der Nginx-Webserver, die MariaDB-Datenbank und die PHP-Programmiersprache sind auf Ihrem Debian 10-Rechner installiert. Sie können jetzt damit beginnen, dynamische Websites oder Webanwendungen für Ihre Besucher zu erstellen.


Debian
  1. Installieren Sie Lets Encrypt und Secure Nginx mit SSL/TLS in Debian 9

  2. So installieren Sie Nginx mit PHP und MySQL (LEMP Stack) unter Ubuntu 18.04

  3. Anleitung zum Installieren und Einrichten von PHP und Nginx (LEMP) unter Debian 11

  4. So installieren und konfigurieren Sie den LEMP-Server (Nginx, MySQL und PHP) auf einem Debian 6 (Squeeze) VPS

  5. So installieren Sie LEMP Stack Nginx, MySQL, PHP unter Debian 11

So installieren Sie Nginx mit PHP + MySQL (LEMP) unter Debian 9

So installieren Sie Grav CMS mit Nginx unter Debian 9

So installieren Sie Nginx, MariaDB, PHP (LEMP-Stack) unter Debian 9

So installieren Sie Nginx mit PHP-FPM unter Debian 10

So installieren Sie LEMP WordPress Ubuntu und Debian mit Virtualhost

So installieren Sie phpBB mit LEMP (Nginx, MariaDB und PHP) unter Debian 11 Bullseye