Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Adminer – Datenbanktool Installation + NginX vHOST einrichten 2/2

Im ersten Teil haben wir das Verzeichnis für das Webprojekt angelegt, Adminer geladen und verschoben und eine .htpass-Datei erstellt. In Teil 2 kommt NginX an die Reihe…

Wir richten einen vHOST ein

Bei NginX gibt es zwei Verzeichnisse für die vHOST-Conf-Dateien:

  • /etc/nginx/sites-available
  • /etc/nginx/sites-enabled

Wichtig! Die tatsächlichen „Dateien“ liegen alle in „sites-available“!
Im „enabled“ sind nur „symbolische Links“ auf die Conf-Dateien von „available“…

Die Conf-Dateien können wir benennen, wie wir möchten. Damit wir aber leichter ‚wer-zu-was‘ finden, sollten wir sie so nennen, wie unsere Verzeichnisse in /var/www.

Wir legen also die Conf-Datei „adminer.conf“ im „sites-available“-Verzeichnis an.
nano /etc/nginx/sites-available/adminer.conf
server {
listen 80;
server_name mysql.bla.de;
rewrite ^(.*) https://$server_name$1 permanent;
}

server {
server_name mysql.bla.de;
include ssl-base.conf;
root /var/www/adminer;
auth_basic „Admin-Bereich – Zugriff nur mit Passwort!“;
auth_basic_user_file /var/www/adminer/.htpass;
index adminer-4.2.2-mysql-de.php;
access_log /var/log/nginx/adminer-access.log;
error_log /var/log/nginx/adminer-error.log;
include nein.conf;
include hhvm.conf;
ssl_certificate /root/CA/certs/bla.de-vhost.crt;
ssl_certificate_key /root/CA/private/bla.de-vhost.key;
}

Speichern und durchatmen…
Das ist schon eine ziemlich aufgebohrte Conf-Datei. Dazu bedarf es einiger…

Erläuterungen!

Wir haben zwei Server-Blöcke zwischen den Geschweiften Klammern. Der obere ‚hört‘ auf Port 80, der untere auf Port 443 (SSL). Darum auch „listen„.

Nach jeder Anweisung innerhalb der geschweiften Klammern muss ein Semikolon (;) stehen, um die Anweisung abzuschließen. Ein vergessener Strichpunkt kann ganz schön Kopfschmerzen bereiten, wenn NginX nicht mehr starten will…

Beide Blöcke hören auf die gleiche Domain: „server_name mysql.bla.de„. Das heißt, dieser vHOST ist NUR für „mysql.bla.de“ zuständig. „bla.de“ oder „www.bla.de“ jucken ihn nicht. Die würden momentan in den „default“ Host fallen, weil dafür noch nichts definiert worden ist.
Jede Domain, die auf unseren Server zeigt, aber für die noch keine Conf-Datei erstellt wurde, landet automatisch in „default“!

Der Port-80-Block ist nur eine permanente Weiterleitung auf SSL, sprich „https://“. Mehr macht er nicht. Wenn jemand mit http://mysql.bla.de ankommt, schreibt der obere Block diese Adresse auf https://mysql.bla.de um. Und dann übernimmt der untere Block.

Über die „include ssl-base.conf“ wird das SSL-Basis(konfigurations)modul geladen, welches wir bei der Installation von NginX angelegt haben. Da steht dann auch die „listen 443“ Direktive drin, die sich um SSL-Verbindungen kümmert.
Generell: Wir brauchen in einer vHOST-Conf-Datei SSL? Dann schreiben wir einen ‚include ssl-base.conf‚ und haben damit alle Standard-Anweisungen zusammen. Genial – Einfach :)

Unsere „root /var/www/adminer“ Direktive teile NginX mit, dass die Dateien, die er braucht, falls jemand über „https://mysql.bla.de“ ankommt, in dem Verzeichnis /var/www/adminer sind. Das „root“ steht quasi für die Verzeichnis-Wurzel. „/var/www/adminer“ ist das Basis-Verzeicnis für alle Anfragen via „https://mysql.bla.de“.

Beide „auth_basic“ Zeilen kümmern sich nun um den Passwortschutz. Da er nicht an eine „location“ gebunden wurde, gilt er für die komplette Webseite. In dem Moment, in dem wir die Seite ansurfen, werden wir sofort nach einem Benutzernamen / Passwort gefragt. Und ohne PW geht es nicht weiter. Game-Over, Script-Kiddies :)
In der oberen Zeile definieren wir, was bei der Anfrage für ein Text mitgesendet wird. Hier recht neutral und kühl „Admin-Bereich – Zugriff nur mit Passwort!“. Du kannst da viel kreativer sein und „Einlass nur ab 21!“ oder „Zutritt nur für rosa Einhörner“ schreiben. Deiner Phantasie sind keine Grenzen gesetzt ;)
in der unteren Zeile definieren wir den Namen und die Position der Benutzer/PW-Datei. Das ist unsere .htpass im adminer-Verzeichnis.

Die „index adminer-4.2.2-mysql-de.php“ legt nun fest, welche Datei NginX als „Startdatei“ benutzt. Normalerweise wäre das „index.html“. Haben wir nicht. Also sagen wir NginX, er möge doch bitte, wenn jemand über „https://mysql.bla.de“ ankommt und die Passwortabfrage überstanden hat, ihm die Datei „adminer-4.2.2-mysql-de.php“ ausliefern.

Beide Anweisungen für das Logging sagen NginX, an welcher Position und mit welchem Namen er die Zugriffs- und Fehler-Logs anlegen und abspeichern soll. Würden wir hier nichts definieren, schreibt NginX in seine beiden „Standard“-Logs, „access.log“ und „error.log“. Haben wir eine Menge Domains, dann wird das total unübersichtlich.

Wir brauchen für dieses Web-Projekt PHP. Also fügen wir das Modul für unsere HHVM hinzu: „include hhvm.conf„. Das war’s schon. der PHP-Compiler ist aktiv.

Mit „include nein.conf“ laden wir die globalen Einschränkungen. Hauptsächlich, dass alle Dateien mit einem Punkt vorne dran nicht ausgeliefert werden dürfen. Aber hier passen auch die ersten beiden Direktiven in nein.conf – die fehlenden „favicon.ico“ und „robots.txt“ werden nicht moniert und nicht geloggt.

Zu guter Letzt brauchen wir noch die Positionen und Namen von unserem SSL-Zertifikat und dem -Schlüssel. Die liegen in „/root/CA/certs“ und „/root/CA/private“. Groß- und Kleinschreibung ist unter Linux wichtig…
ssl_certificate /root/CA/certs/bla.de-vhost.crt;
ssl_certificate_key /root/CA/private/bla.de-vhost.key;

Und das war’s. Damit läuft Adminer, die SSL-Verschlüsselung und die PW-Abfrage :)

vHOST „aktivieren“

Jetzt müssen wir die Config nur noch „aktivieren“. Dazu legen wir einen symbolischen Link von der Config-Datei in den „verfügbaren Seiten“ auf die „eingeschalteten Seiten“ an
ln -s /etc/nginx/sites-available/adminer.conf /etc/nginx/sites-enabled

NginX neu starten, um die Änderungen zu erfassen
service nginx restart

Immer daran denken: Bei JEDER Änderung an einer der Config-Dateien MUSS NginX neu gestartet werden, sonst wird die Änderung nicht aktiv.

Erstes Einloggen

Wenn wir im Browser jetzt mysql.bla.de eingeben, sehen wir, dass wir auf https://mysql.bla.de umgeleitet werden.

Es erscheint die Warnung, dass unser Zertifikat nicht vertrauenswürdig ist. Aber hey, das wissen wir ja. Und darum richten wir eine permanente Ausnahmeregel für diese Verbindung ein, damit der Browser uns nicht jedes Mal damit nervt.
Bei Firefox sieht das dann so aus:
ssl-ausnahmeregel-hinzufügen

Ist das Zertifikat bestätigt, laufen wir direkt in die Passwortabfrage:
nginx-passwortabfrage

Geben wir hier eine falsche User/PW-Kombination ein, wird uns der Zugriff durch NginX verweigert (Fehler 401 – Authorization Required).
nginx-falsches-pw-401

Nach Eingabe der richtigen Daten landen wir auf dem Login-Screen von Adminer:
nginx-adminer-login
Hier loggen wir uns über „root“ und das Passwort vom „MariaDB-root-User“ (nicht das root-PW vom Server!) ein. Eine Datenbank brauchen wir nicht auswählen. Einfach „Login“ anklicken.

nginx-adminer-datenbank-übersicht
Gratulation! Wir sind drin :)
Von hier aus können wir dann sehr leicht neue Benutzer und Datenbanken anlegen.

NginX, PHP und SSL laufen – Ziel erreicht!

Anzeige *

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.