Einführung
Der LEMP-Software-Stack ist eine Gruppe von Software, mit der dynamische Webseiten und Webanwendungen bereitgestellt werden können. Dies ist ein Akronym, das ein Linux-Betriebssystem mit einem Nginx-Webserver beschreibt. Die Backend-Daten werden in der MySQL-Datenbank gespeichert und die dynamische Verarbeitung wird von PHP übernommen.
In diesem Handbuch wird gezeigt, wie Sie einen LEMP-Stack auf einem Ubuntu 16.04-Server installieren. Das Ubuntu-Betriebssystem kümmert sich um die erste Anforderung. Wir werden beschreiben, wie Sie den Rest der Komponenten in Betrieb nehmen können.
Voraussetzungen
Bevor Sie dieses Lernprogramm abschließen, sollten Sie auf Ihrem Server ein reguläres Nicht-Root-Benutzerkonto mit den Berechtigungen vonsudo
haben. Sie können lernen, wie Sie diese Art von Konto einrichten, indem Sie unsereUbuntu 16.04 initial server setup ausfüllen.
Sobald Sie Ihren Benutzer verfügbar haben, melden Sie sich mit diesem Benutzernamen bei Ihrem Server an. Sie können nun mit den in diesem Handbuch beschriebenen Schritten beginnen.
Schritt 1: Installieren Sie den Nginx-Webserver
Um Webseiten für die Besucher unserer Website anzuzeigen, setzen wir Nginx ein, einen modernen, effizienten Webserver.
Die gesamte Software, die wir für dieses Verfahren verwenden, wird direkt aus den Standard-Paket-Repositorys von Ubuntu stammen. Dies bedeutet, dass wir die Paketverwaltungssuite vonapt
verwenden können, um die Installation abzuschließen.
Da wirapt
zum ersten Mal für diese Sitzung verwenden, sollten wir zunächst unseren lokalen Paketindex aktualisieren. Wir können dann den Server installieren:
sudo apt-get update
sudo apt-get install nginx
Unter Ubuntu 16.04 ist Nginx so konfiguriert, dass es bei der Installation ausgeführt wird.
Wenn die Firewall vonufw
ausgeführt wird, wie in unserem Handbuch zur Ersteinrichtung beschrieben, müssen Sie Verbindungen zu Nginx zulassen. Nginx registriert sich bei der Installation mitufw
, daher ist das Verfahren ziemlich einfach.
Es wird empfohlen, das restriktivste Profil zu aktivieren, das weiterhin den gewünschten Datenverkehr zulässt. Da wir SSL für unseren Server noch nicht konfiguriert haben, müssen wir in diesem Handbuch nur den Datenverkehr auf Port 80 zulassen.
Sie können dies aktivieren, indem Sie Folgendes eingeben:
sudo ufw allow 'Nginx HTTP'
Sie können die Änderung überprüfen, indem Sie Folgendes eingeben:
sudo ufw status
In der angezeigten Ausgabe sollte HTTP-Verkehr zulässig sein:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Mit der neuen Firewall-Regel können Sie testen, ob der Server in Betrieb ist, indem Sie in Ihrem Webbrowser auf den Domänennamen oder die öffentliche IP-Adresse Ihres Servers zugreifen.
Wenn auf Ihrem Server kein Domainname angezeigt wird und Sie die öffentliche IP-Adresse Ihres Servers nicht kennen, geben Sie eine der folgenden Zeichen in Ihr Terminal ein:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Dadurch werden einige IP-Adressen ausgedruckt. Sie können sie nacheinander in Ihrem Webbrowser ausprobieren.
Alternativ können Sie überprüfen, auf welche IP-Adresse von anderen Standorten im Internet aus zugegriffen werden kann:
curl -4 icanhazip.com
Geben Sie eine der Adressen ein, die Sie in Ihrem Webbrowser erhalten. Sie sollten zur Standard-Zielseite von Nginx gelangen:
http://server_domain_or_IP
Wenn Sie die obige Seite sehen, haben Sie Nginx erfolgreich installiert.
Schritt 2: Installieren Sie MySQL, um Site-Daten zu verwalten
Da wir nun einen Webserver haben, müssen wir MySQL, ein Datenbankverwaltungssystem, installieren, um die Daten für unsere Site zu speichern und zu verwalten.
Sie können dies einfach installieren, indem Sie Folgendes eingeben:
sudo apt-get install mysql-server
Sie werden aufgefordert, ein Root-Passwort (Administrator-Passwort) für die Verwendung innerhalb des MySQL-Systems anzugeben.
Die MySQL-Datenbanksoftware ist jetzt installiert, die Konfiguration ist jedoch noch nicht vollständig.
Um die Installation zu sichern, können wir ein einfaches Sicherheitsskript ausführen, das Sie fragt, ob Sie einige unsichere Standardeinstellungen ändern möchten. Beginnen Sie das Skript, indem Sie Folgendes eingeben:
mysql_secure_installation
Sie werden aufgefordert, das Kennwort einzugeben, das Sie für das MySQL-Root-Konto festgelegt haben. Als nächstes werden Sie gefragt, ob SieVALIDATE PASSWORD PLUGIN
konfigurieren möchten.
[.warning] #Warning: Das Aktivieren dieser Funktion ist eine Art Urteilsaufruf. Wenn diese Option aktiviert ist, werden Kennwörter, die nicht den angegebenen Kriterien entsprechen, von MySQL mit einem Fehler abgelehnt. Dies führt zu Problemen, wenn Sie ein schwaches Kennwort in Verbindung mit einer Software verwenden, die automatisch MySQL-Benutzeranmeldeinformationen konfiguriert, z. B. die Ubuntu-Pakete für phpMyAdmin. Es ist sicher, die Validierung deaktiviert zu lassen, aber Sie sollten immer sichere, eindeutige Kennwörter für Datenbankanmeldeinformationen verwenden.
#
Beantworten Siey mit Ja oder etwas anderem, um fortzufahren, ohne es zu aktivieren.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Wenn Sie die Validierung aktiviert haben, werden Sie aufgefordert, eine Ebene für die Passwortvalidierung auszuwählen. Beachten Sie, dass bei der Eingabe von2 für die stärkste Ebene Fehler auftreten, wenn Sie versuchen, ein Kennwort festzulegen, das keine Zahlen, Groß- und Kleinbuchstaben sowie Sonderzeichen enthält oder auf einem allgemeinen Wörterbuch basiert Wörter.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Wenn Sie die Kennwortüberprüfung aktiviert haben, wird eine Kennwortstärke für das vorhandene Root-Kennwort angezeigt, und Sie werden gefragt, ob Sie dieses Kennwort ändern möchten. Wenn Sie mit Ihrem aktuellen Passwort zufrieden sind, geben Sie an der Eingabeaufforderungn für "Nein" ein:
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Für den Rest der Fragen sollten SieY drücken und an jeder Eingabeaufforderung die TasteEnter drücken. Dadurch werden einige anonyme Benutzer und die Testdatenbank entfernt, Remote-Root-Anmeldungen deaktiviert und diese neuen Regeln geladen, sodass MySQL die von uns vorgenommenen Änderungen sofort berücksichtigt.
Jetzt ist Ihr Datenbanksystem eingerichtet und wir können weitermachen.
Schritt 3: Installieren Sie PHP für die Verarbeitung
Wir haben jetzt Nginx installiert, um unsere Seiten zu bedienen, und MySQL installiert, um unsere Daten zu speichern und zu verwalten. Wir haben jedoch immer noch nichts, was dynamische Inhalte erzeugen könnte. Dafür können wir PHP verwenden.
Da Nginx keine native PHP-Verarbeitung wie einige andere Webserver enthält, müssen wirphp-fpm
installieren, was für "fastCGI process manager" steht. Wir werden Nginx anweisen, PHP-Anfragen zur Verarbeitung an diese Software weiterzuleiten.
Wir können dieses Modul installieren und erhalten ein zusätzliches Hilfspaket, mit dem PHP mit unserem Datenbank-Backend kommunizieren kann. Bei der Installation werden die erforderlichen PHP-Kerndateien abgerufen. Tun Sie dies, indem Sie Folgendes eingeben:
sudo apt-get install php-fpm php-mysql
Konfigurieren Sie den PHP-Prozessor
Wir haben jetzt unsere PHP-Komponenten installiert, müssen aber eine kleine Konfigurationsänderung vornehmen, um unser Setup sicherer zu machen.
Öffnen Sie die Hauptkonfigurationsdatei vonphp-fpm
mit Root-Rechten:
sudo nano /etc/php/7.0/fpm/php.ini
Was wir in dieser Datei suchen, ist der Parameter, dercgi.fix_pathinfo
setzt. Dies wird mit einem Semikolon (;) auskommentiert und standardmäßig auf „1“ gesetzt.
Dies ist eine extrem unsichere Einstellung, da PHP aufgefordert wird, die nächstgelegene Datei auszuführen, die es finden kann, wenn die angeforderte PHP-Datei nicht gefunden werden kann. Auf diese Weise können Benutzer PHP-Anforderungen so erstellen, dass sie Skripts ausführen können, die sie nicht ausführen dürfen.
Wir werden diese beiden Bedingungen ändern, indem wir die Zeile auskommentieren und wie folgt auf "0" setzen:
/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Jetzt müssen wir nur noch Ihren PHP-Prozessor neu starten, indem wir Folgendes eingeben:
sudo systemctl restart php7.0-fpm
Dadurch wird die von uns vorgenommene Änderung umgesetzt.
Schritt 4: Konfigurieren Sie Nginx für die Verwendung des PHP-Prozessors
Jetzt haben wir alle erforderlichen Komponenten installiert. Die einzige Konfigurationsänderung, die wir noch vornehmen müssen, besteht darin, Nginx anzuweisen, unseren PHP-Prozessor für dynamische Inhalte zu verwenden.
Dies geschieht auf Serverblockebene (Serverblöcke ähneln den virtuellen Hosts von Apache). Öffnen Sie die Standardkonfigurationsdatei für den Nginx-Serverblock, indem Sie Folgendes eingeben:
sudo nano /etc/nginx/sites-available/default
Derzeit sieht die Nginx-Standard-Serverblockdatei mit den entfernten Kommentaren folgendermaßen aus:
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Wir müssen einige Änderungen an dieser Datei für unsere Site vornehmen.
-
Zuerst müssen wir
index.php
als ersten Wert unserer Direktiveindex
hinzufügen, damit Dateien mit dem Namenindex.php
bereitgestellt werden, sofern verfügbar, wenn ein Verzeichnis angefordert wird. -
Wir können die Anweisung
server_name
o ändern, dass sie auf den Domänennamen oder die öffentliche IP-Adresse unseres Servers verweist. -
Für die eigentliche PHP-Verarbeitung müssen wir nur ein Segment der Datei auskommentieren, das PHP-Anforderungen verarbeitet, indem wir die Raute (#) vor jeder Zeile entfernen. Dies ist der Positionsblock
location ~\.php$
, das enthaltene Snippetfastcgi-php.conf
und der Socket, derphp-fpm
zugeordnet ist. -
Wir werden auch den Standortblock, der sich mit
.htaccess
Dateien befasst, mit derselben Methode auskommentieren. Nginx verarbeitet diese Dateien nicht. Wenn eine dieser Dateien in den Dokumentenstamm gelangt, sollte sie nicht an Besucher weitergeleitet werden.
Die Änderungen, die Sie vornehmen müssen, sind im folgenden Text rot dargestellt:
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Wenn Sie die obigen Änderungen vorgenommen haben, können Sie die Datei speichern und schließen.
Testen Sie Ihre Konfigurationsdatei auf Syntaxfehler, indem Sie Folgendes eingeben:
sudo nginx -t
Wenn Fehler gemeldet werden, überprüfen Sie Ihre Datei erneut, bevor Sie fortfahren.
Wenn Sie bereit sind, laden Sie Nginx neu, um die erforderlichen Änderungen vorzunehmen:
sudo systemctl reload nginx
Schritt 5: Erstellen Sie eine PHP-Datei zum Testen der Konfiguration
Ihr LEMP-Stack sollte jetzt vollständig eingerichtet sein. Wir können es testen, um zu überprüfen, ob Nginx.php
Dateien korrekt an unseren PHP-Prozessor übergeben kann.
Wir können dies tun, indem wir eine Test-PHP-Datei in Ihrem Dokumentenstamm erstellen. Öffnen Sie eine neue Datei mit dem Nameninfo.php
in Ihrem Dokumentstamm in Ihrem Texteditor:
sudo nano /var/www/html/info.php
Geben Sie die folgenden Zeilen ein oder fügen Sie sie in die neue Datei ein. Dies ist ein gültiger PHP-Code, der Informationen über unseren Server zurückgibt:
/var/www/html/info.php
Wenn Sie fertig sind, speichern und schließen Sie die Datei.
Jetzt können Sie diese Seite in Ihrem Webbrowser besuchen, indem Sie den Domainnamen oder die öffentliche IP-Adresse Ihres Servers gefolgt von/info.php
aufrufen:
http://server_domain_or_IP/info.php
Sie sollten eine von PHP generierte Webseite mit Informationen zu Ihrem Server sehen:
Wenn Sie eine Seite sehen, die so aussieht, haben Sie die PHP-Verarbeitung mit Nginx erfolgreich eingerichtet.
Nachdem Sie sichergestellt haben, dass Nginx die Seite korrekt wiedergibt, entfernen Sie am besten die von Ihnen erstellte Datei, da sie nicht autorisierten Benutzern Hinweise zu Ihrer Konfiguration geben kann, die ihnen beim Versuch helfen können, einzudringen. Sie können diese Datei jederzeit neu generieren, wenn Sie sie später benötigen.
Entfernen Sie vorerst die Datei, indem Sie Folgendes eingeben:
sudo rm /var/www/html/info.php
Fazit
Auf Ihrem Ubuntu 16.04-Server sollte jetzt ein LEMP-Stack konfiguriert sein. Dies gibt Ihnen eine sehr flexible Grundlage für die Bereitstellung von Webinhalten für Ihre Besucher.