Ubuntu 18.04 Server: Nginx, PHP und MariaDB installieren und konfigurieren
Um Nginx, PHP-FPM und MariaDB zusammen auf Ubuntu 18.04 zu verwenden, müssen Sie jedes Paket installieren, Nginx-Anfragen an PHP an das PHP-FPM-Socket weiterleiten und dann die Datenbank mit separaten Konten einrichten. Das folgende Beispiel ist nur eine lokale Übung, die bestehende Websites nicht verändert und das Root-Konto der Datenbank für Webanwendungen nicht verwendet.
Umfang der Übung und Vorbereitung
Der allgemeine Sicherheitssupport für Ubuntu 18.04 ist beendet. Überprüfen Sie, ob das Extended Security Maintenance (ESM) von Ubuntu Pro angewendet wird und den Unterstützungsbereich für jedes Paket unter Ubuntu Security Maintenance Schedule, und es wird empfohlen, neue Betriebssystemumgebungen mit unterstützten Versionen zu erstellen. Dieser Artikel verwendet PHP 7.2 aus dem Standard-Repository als Beispiel, um einen bestehenden 18.04-Server zu verstehen.
Bereiten Sie einen separaten Testserver mit Administratorrechten und Repository-Zugriff vor. Nginx verarbeitet Webanfragen, PHP-FPM (FastCGI Process Manager) führt PHP-Code aus und MariaDB speichert Daten. Beispiele werden nur in 127.0.0.1:8080 bereitgestellt, sodass Sie nicht direkt von außerhalb des Servers darauf zugreifen können. Für den öffentlichen Internetzugang sind separate Firewall, Domain, TLS-Zertifikat und Sicherheitsprüfung erforderlich.
Auf Servern mit vorhandenen Diensten oder Daten bereiten Sie vor Änderungen Sicherungs- und Wiederherstellungsverfahren vor. Wenn die unten genannten Praxispfade, Konten, Datenbanknamen oder der Port 8080 bereits verwendet werden, fahren Sie nicht wie angegeben fort; verwenden Sie eine separate Testumgebung. Sie können die Portnutzung mit folgendem Befehl überprüfen. Wenn keine Ausgabe erfolgt, gibt es keinen TCP-Listener für diesen Port.
sudo ss -lntp | grep ':8080 '
Paketinstallation und Serviceüberprüfung
Die Paketinstallation kann die Nginx-Standardseite automatisch starten, die auf Port 80 lauschen kann. Die Beschränkung der Testseite auf den lokalen Port 8080 beschränkt die Standardseite nicht. Isolieren Sie den Testserver vor der Installation durch Netzwerk- und Firewallregeln und prüfen Sie die Auswirkungen auf bestehende Dienste.
Nach dem Aktualisieren der Paketliste installieren Sie Nginx, PHP 7.2 FPM mit MySQL-Treiber, MariaDB-Server und curl zur Überprüfung. Wenn Pakete aufgrund von Repository- oder Unterstützungsproblemen nicht verwendet werden können, beheben Sie die Fehler, bevor Sie fortfahren.
sudo apt update
sudo apt install nginx php7.2-fpm php7.2-mysql mariadb-server curl
Nach der Installation überprüfen Sie den Dienststatus und die PHP-FPM-Socket mit den folgenden Befehlen. Wenn der Dienst nicht läuft, identifizieren Sie die Ursache und starten Sie den Dienst. Wenn der Socket-Pfad unterschiedlich ist, passen Sie die Nginx-Konfiguration unten an den tatsächlichen Pfad an.
systemctl is-active nginx php7.2-fpm mariadb
ls -l /run/php/
Überprüfen Sie, ob jeder der drei Dienste active ist. Wenn php7.2-fpm.sock nicht existiert, überprüfen Sie die Ursache in systemctl status php7.2-fpm und die Dienstprotokolle. Wenn die PHP-Version unterschiedlich ist, müssen Sie sowohl das Paket als auch den Socket-Pfad zusammen ändern.
Verbindung zwischen Nginx und PHP-FPM
Erstellen Sie ein neues Praxisverzeichnis und eine Konfigurationsdatei. Überschreiben Sie /var/www/lnmp-demo, /etc/nginx/sites-available/lnmp-demo oder /etc/nginx/sites-enabled/lnmp-demo nicht, falls sie bereits existieren. Führen Sie die untenstehenden Bearbeitungsbefehle aus, nachdem Sie bestätigt haben, dass auf einem sauberen Server kein vorhandener Pfad existiert.
sudo mkdir /var/www/lnmp-demo
sudo nano /etc/nginx/sites-available/lnmp-demo
Speichern Sie den folgenden vollständigen Serverblock im Editor. fastcgi_pass muss mit der zuvor bestätigten PHP-FPM-Socket übereinstimmen. snippets/fastcgi-php.conf ist ein Konfigurationssnippet aus dem Ubuntu Nginx-Paket; falls die Datei nicht existiert, überprüfen Sie die FastCGI-Einstellungen in der Distribution.
server {
listen 127.0.0.1:8080;
server_name localhost;
root /var/www/lnmp-demo;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
Aktivieren Sie die Konfigurationsdatei und prüfen Sie sie. Laden Sie sie nur neu, wenn nginx -t erfolgreich ist. Wenn sie fehlschlägt, überprüfen und korrigieren Sie Fehler, Ports und Socket-Pfade und prüfen Sie erneut. Wenn ein Problem auftritt, entfernen Sie nur die in dieser Übung erstellten symbolischen Links, prüfen Sie erneut und laden Sie neu, um die bestehende Webseitenkonfiguration beizubehalten.
sudo ln -s /etc/nginx/sites-available/lnmp-demo /etc/nginx/sites-enabled/lnmp-demo
sudo nginx -t
sudo systemctl reload nginx
Nginx FastCGI-Verbindungen können auch in Nginx Offizieller Leitfaden überprüft werden.
PHP-Ausführung überprüfen
Überprüfen Sie, dass sich im unten stehenden Pfad keine Datei befindet, und erstellen Sie eine neue Datei. Speichern Sie den unten stehenden Code in Ihrem Editor.
sudo nano /var/www/lnmp-demo/index.php
<?php
header('Content-Type: text/plain; charset=UTF-8');
echo "PHP is working\n";
echo 'SAPI: ' . PHP_SAPI . "\n";
Führen Sie den folgenden Befehl auf demselben Server aus. Wenn PHP is working und SAPI: fpm-fcgi erscheinen, hat Nginx den Code über PHP-FPM ausgeführt. Wenn der PHP-Code unverändert angezeigt wird, wurde die Konfiguration nicht angewendet. Also legen Sie die Testdatei nicht offen und überprüfen Sie erneut die FastCGI-Einstellungen.
curl http://127.0.0.1:8080/
Wenn ein 502-Fehler auftritt, prüfen Sie den PHP-FPM-Dienst, den Socket-Pfad und die Berechtigungen; wenn ein 404-Fehler auftritt, überprüfen Sie das Dokumentenverzeichnis und den Dateipfad. Legen Sie die phpinfo()-Seite, die detaillierte Servereinstellungen offenbart, nicht zugänglich.
MariaDB-Datenbank und separates Konto
Die Authentifizierung des MariaDB-Administrators hängt von der Installationsmethode ab. Wenn die lokale Socket-Authentifizierung eingerichtet ist, können Sie die Verwaltungskonsole mit folgendem Befehl öffnen. Falls dies fehlschlägt, überprüfen Sie die bestehende Administrator-Authentifizierungsmethode. MYSQL_HISTFILE=/dev/null gibt an, dass diese Clientsitzung keine Befehlsverlaufsdatei erstellen sollte.
sudo env MYSQL_HISTFILE=/dev/null mysql
Im Folgenden finden Sie SQL, um eine neue Übungsdatenbank und ein lokal ausschließliches Konto zu erstellen. Wenn derselbe Name bereits existiert, ändern Sie den vorhandenen Eintrag nicht; verwenden Sie einen anderen Namen. Vor der Ausführung ersetzen Sie CHANGE_ME_STRONG_PASSWORD durch ein langes, einzigartiges Passwort und stellen Sie sicher, dass alle Anführungszeichen oder Backslashes im SQL-String korrekt maskiert sind.
CREATE DATABASE lnmp_demo CHARACTER SET utf8mb4;
CREATE USER 'lnmp_demo'@'localhost' IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';
GRANT SELECT ON lnmp_demo.* TO 'lnmp_demo'@'localhost';
EXIT;
Dieses Beispielkonto hat nur Lesezugriff auf die Datenbank. Wenn eine tatsächliche Anwendung Schreib- oder Schemaänderungsberechtigungen benötigt, gewähren Sie diese Berechtigungen einzeln und nur in dem erforderlichen Umfang. Ändern Sie nicht direkt das Authentifizierungs-Plugin des Admin-Kontos und geben Sie der Webanwendung keine Root-Rechte. Weitere Informationen zu Konten und Authentifizierung finden Sie in der MariaDB CREATE USER-Dokumentation.
Überprüfen Sie, ob das neue Konto lokal eine Verbindung herstellen kann. Geben Sie das Passwort nicht direkt in der Befehlszeile ein; geben Sie es stattdessen bei der Aufforderung ein. Nach dem Herstellen der Verbindung wird die Ausführung von SELECT DATABASE(), CURRENT_USER(); die Datenbank und die authentifizierten Konten anzeigen. Beenden Sie die Konsole mit EXIT;.
mysql -u lnmp_demo -p lnmp_demo
Überprüfen Sie die Datenbankverbindung in PHP
Die folgende Methode ist eine temporäre Überprüfung unter Verwendung des oben erstellten Kontos. Bewahren Sie die Zugangsdaten außerhalb des Webdokumentverzeichnisses auf. Falls /etc/lnmp-demo bereits existiert, überschreiben Sie es nicht; verwenden Sie stattdessen eine separate Testumgebung. Dies setzt die Standardkonfiguration voraus, bei der PHP-FPM unter der www-data-Gruppe läuft.
sudo install -d -m 750 -o root -g www-data /etc/lnmp-demo
sudo install -m 640 -o root -g www-data /dev/null /etc/lnmp-demo/db.php
sudo nano /etc/lnmp-demo/db.php
Fügen Sie den folgenden Inhalt in die Datei ein und ersetzen Sie das Passwort durch den für das Datenbankkonto festgelegten Wert. Wenn Anführungszeichen oder Backslashes im PHP-String vorkommen, müssen diese korrekt maskiert werden. Da andere Anwendungen, die mit denselben www-data-Berechtigungen laufen, die Datei ebenfalls lesen können, ist auf gemeinsam genutzten Servern eine separate Isolation erforderlich.
<?php
return array(
'user' => 'lnmp_demo',
'password' => 'CHANGE_ME_STRONG_PASSWORD',
);
Stellen Sie sicher, dass /var/www/lnmp-demo/db-check.php nicht existiert, und speichern Sie den folgenden Code. Geben Sie nur den Erfolg oder Misserfolg an, um zu vermeiden, dass Fehlermeldungen oder Passwörter in der Web-Antwort angezeigt werden.
sudo nano /var/www/lnmp-demo/db-check.php
<?php
header('Content-Type: text/plain; charset=UTF-8');
ini_set('display_errors', '0');
$config = require '/etc/lnmp-demo/db.php';
try {
$db = new PDO('mysql:host=localhost;dbname=lnmp_demo;charset=utf8mb4',
$config['user'], $config['password'],
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
echo "Database connection OK\n";
} catch (PDOException $e) {
http_response_code(500);
echo "Database connection failed\n";
}
curl -i http://127.0.0.1:8080/db-check.php
Wenn HTTP 200 und Database connection OK erscheinen, war die PHP-Verbindung zu MariaDB erfolgreich. Sollte sie fehlschlagen, prüfen Sie die PHP-MySQL-Erweiterung, den Dienststatus, die Socket-Authentifizierung und Konto/Passwort. Nach der Überprüfung entfernen Sie die temporären PHP-Dateien und Anmeldedateien sicher und bereinigen Sie die Übungskonten und Datenbanken, die nicht mehr benötigt werden, nachdem Sie die tatsächlichen Ziele und vorhandene Backups überprüft haben.
Vor der Anwendung in der Produktionsumgebung
Die Praxis-Einrichtung dient der Überprüfung der lokalen Verbindung. Bevor tatsächliche Dienste öffentlich gemacht werden, migrieren Sie zu unterstützten Betriebssystem- und PHP-Versionen und konfigurieren Sie den Nginx-Servernamen und das Dokumentenstammverzeichnis, HTTPS-Zertifikate, Firewall- und Cloud-Netzwerkregeln entsprechend der Umgebung. Sie müssen außerdem den PHP-Datei-Upload/-Ausführungsbereich, die FPM-Benutzertrennung sowie den MariaDB-Netzwerkzugang, Backup und Wiederherstellung überprüfen.
Das Security-Konfigurationstool für MariaDB wird je nach installierter Version als mysql_secure_installation oder mariadb-secure-installation bereitgestellt. Da es bestehende Dienste beeinflussen kann, lesen Sie jede Frage und wählen Sie entsprechend Ihrer Umgebung. Detaillierte Punkte finden Sie in Beschreibung des MariaDB-Sicherheitskonfigurationstools.




