QuickTipp: Weiterleitung (redirect) von HTTP auf HTTPS via Apache oder Htaccess
Sensible Webseiten-Daten sollten grundsätzlich immer via SSL Verschlüsseltung ausgeliefert werden (HTTPS statt HTTP). Ich zeige in diesem QuickTipp wie die Weiterleitung von HTTP auf HTTPS eingerichtet wird sodass auch Parameter erhalten bleiben.
Eine SSL Verschlüsselung ist grundsätzlich einge gute Idee sensible Daten gegen Dritte zu schützen. Aber was bringt es wenn das SSL Zertifikat am Root Server / managed Server installiert und die Verschlüsselung aktiviert ist, aber die Webseite trotzdem noch per HTTP erreichbar ist? HTTP muss daher auf HTTP weitergeleitet werden. Je nachdem welche Bereiche man schützen will kann man die Konfiguration erweitern, sodass sie nur für gewisse Verzeichnisse oder Anfragen greift.
Voraussetzung: Apache rewrite Modul aktiviert und Webserver bereits via HTTP und HTTPS erreichbar.
HTTP auf HTTPS weiterleiten via htaccess
Die .htaccess Datei sollte direkt im Root Verzeichnis der Webseite liegen. In meinem Beispiel werden sämtliche Webseiten Aufrufe, welche per HTTP auf den Server kommen, auf HTTPS umgeschrieben. Für den User bleibt dieser Vorgang eigentlich völlig unbemerkt, da der Prozess im Hintergrund statt findet.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Zeile 1: überprüft ob das Modul mod_rewrite aktiviert ist
Zeile 2: aktiviert die Rewrite Engine
Zeile 3: überprüft ob HTTPS eingeschaltet ist, wenn nicht führt er den Inhalt von Zeile 4 aus
Zeile 4: leitet sämtliche Anfragen via Statuscode 301 (permanent redirect) auf HTTPS um
Warum Status Code 301 und nicht 302?
Standardmäßig wird in der RewriteRule mit R (Redirect) die Weiterleitung definiert. Diese liefert den HTML Statuscode 302 (found), also eine Temporäre Weiterleitung zurück. Wir definieren aber explizit den Status Code 301 (permanent redirect) für eine Permanente Weiterleitung.
Das ist gerade für SEOs in der Suchmaschinenoptimierung sehr wichtig, wenn bereits Backlinks auf die Webseite mit HTTP existieren. Die Linkkraft wird mit einem 301 Redirect direkt und ohne Verlust auf die HTTPS Seite übertragen, ohne dabei an Ranking zu verlieren.
Matt Cutts über 301 Weiterleitungen
Weiterleitung von HTTP auf HTTPS über die Apache Konfiguration
Die Rewrite Regeln müssen nicht unbedingt in einer htacccess Datei stehen, sondern können direkt in der Apache Konfiguration eingetragen werden. zb:. wie folgt in der vHost Konfiguration:
<Virtualhost vhost.domain.com>
ServerName vhost.domain.com
DocumentRoot /var/www/website1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
</Virtualhost>
Sämtliche Aufrufe auf die Website http://vhost.domain.com werden auf https://vhost.domain.com umgeleitet. Voraussetzung ist natürlich dass die Webseite auch für SSL konfiguriert wurde.
Weitere Informationen zu Apache Rewrite gibts in der offiziellen Dokumentation
QuickTipp: Cron Daemon Mails deaktivieren – Cronjob ohne Ausgabe Email
In meinem letzten Artikel zum Thema “Cronjob Ausgabe in Datei umleiten” kam vom Blogleser Sebastian die Frage auf, wie man nervige Cronjob Daemon Emails abstellen kann.
Vorneweg möchte ich sagen dass es unter Umständen nicht schlau ist einfach die Cron Emailbenachrichtigung zu deaktivieren. Denn die Cronjobs sollten ja grundsätzlich so konfiguriert sein, dass nur im Fehlerfall ein Email gesendet wird. Das ist besonders wichtig, da wir ja wissen wollen wenn mal ein Cronjob fehl schlägt.
Deshalb ist es ratsam sein Skript so zu optimieren, dass beim “normalen” Ausführen keine Fehler entstehen. Sollte dann wirklich mal ein Fehler passieren weil irgendwelche Dateien beschädigt sind oder ähnliches, dann wirft das Skript einen Fehler und benachrichtigt uns per Email.
Cronjob Daemon Mails nur im Fehlerfall (Error)
Damit nicht die gesamte Ausgabe (ohne Fehler) eines Cronjobs per Email versendet wird kann die Standard Ausgabe (stdout) nach /dev/null umgeleitet werden. Ein Cronjob würde dann wie folgt aussehen:
30 22 * * * /usr/scripts/mysql_backup.sh > /dev/null
“>” steht dabei für die Kurzfassung von “1>” (stdout) und gibt die Anweisung die “normale” (non error) Ausgabe umzuleiten.
Cronjob Emails deaktivieren
Wer aber dennoch die Benachrichtigung für einen bestimmten Cronjob deaktivieren möchte kann wie folgt vorgehen:
30 22 * * * /usr/scripts/mysql_backup.sh > /dev/null 2>&1
“2>&1″ steht für die Umleitung der Error Ausgabe (stderr) in die “normale” Ausgabe (stdout). Die gesamte Ausgabe von /usr/scripts/mysql_backup.sh (stdout und stderr) wird so einfach ins Datennirvana nach /dev/null geleitet.
Bessere Variante:
Der cron Eintrag kann auch folgendermaßen abgekürzt werden “&>” steht also für “2>&1″:
30 22 * * * /usr/scripts/mysql_backup.sh &> /dev/null
Cronjob Email Adresse ändern
Will man die Mail Adresse für die Cronjob Benachrichtigung ändern, kann man folgende Variable in den Cronjobs definieren (wird einmal in der Crontab gesetzt):
MAILTO="deine@mailadresse.com"
QuickTipp: Cronjob Skript Ausgabe in Datei umleiten (loggen) – cron – crontab
Cronjobs sind eine tolle Erfindung um diverse Dinge unter Linux zu automatisieren. Wer in einem Cronjob ein Shell Skript ausführt und die gesamte Ausgabe in eine Datei loggen möchte kann das über folgenden Parameter realisieren: > /pfad/zur/logdatei.log 2>&1
Ausgabe von Cronjob in Datei umleiten
crontab -e 30 22 * * * /usr/scripts/mysql_backup.sh > /usr/scripts/mysql_backup.log 2>&1
> /usr/scripts/mysql_backup.log weist an dass die Standard Ausgabe (stdout) des Skripts backup.sh in die Logdatei mysql_backup.log geschrieben wird
2>&1 weist an dass sowohl die Standard Ausgabe (stdout) als auch die Error Ausgabe (stderr) in die Logfile geschrieben werden
Bessere Variante:
Der cron Eintrag kann auch wie folgt abgekürzt werden “&>” steht für “2>&1″:
30 22 * * * /usr/scripts/mysql_backup.sh &> /usr/scripts/mysql_backup.log
Ausgabe an Log Datei anhängen und nicht neu schreiben
Hinweis: Jede Ausführung des Cronjobs schreibt die Datei mysql_backup.log neu. Möchte man dass die Ausgabe an das Logfile angehängt wird, so muss das Pfeilzeichen > verdoppelt werden: >>
crontab -e 30 22 * * * /usr/scripts/mysql_backup.sh >> /usr/scripts/mysql_backup.log 2>&1
Hier gibt es weitere Tipps zum Erstellen von Cronjobs
Hosting Provider Wechsel zu Contabo
Ich habe mich, aus mehreren Gründen, dazu entschlossen meinen Hosting Provider zu wechseln und meine Entscheidung fiel dabei auf das Hosting Unternehmen Contabo.
Contabo besteht seit 10 Jahren und betreibt sein eigenes Rechenzentrum in München, ist also kein 0815 Reseller wie mittlerweile 100te von anderen selbstbezeichneten “Hosting Provider”.
Ich finde das Preis- Leistungsverhältnis wirklich klasse und so fiel meine Wahl auf den VPS XL Server:
6x 3,2Ghz CPU Cores
16 GB RAM
800GB Speicherplatz
Installiert natürlich mit Debian, ohne Verwaltungs-Schnick-Schnack.
Was will man mehr?
Die Bestellung lief absolut reibungslos ab und ich erhielt am selben Tag noch die Zugangsdaten für meinen neuen Server. Der Umzug ist bereits abgeschlossen und ich muss sagen dass die Geschwindigkeit absolut überzeugt.
Ich kann Contabo wirklich sehr empfehlen.
MySQL Datenbank transferieren – sichern und wiederherstellen – kopieren – Linux Konsole
Ich möchte in diesem Guide zeigen wie einfach eine MySQL Datenbank von einem Server auf einen den anderen Server übertragen werden kann oder dupliziert wird. Es gibt natürlich mehrere Wege bzw. Programme von Drittanbietern, die einen Transfer (Sicherung) vereinfachen oder auch grafisch darstellen. Ich erkläre hier aber bewusst den Weg auf der Linux Konsole.
MySQL Datenbank sichern
Die MySQL Datenbank, mit dem Namen datenbank1, wird mit dem Befehl “mysqldump” gesichert. Es wird dabei ein Abbild (dump) von datenbank1 nach /usr/src/datenbank1.sql geschrieben. Das MySQL Root Passwort wird nach der Eingabe abgefragt.
mysqldump -u root -p datenbank1 > /usr/src/datenbank1.sql
Datenbank Dump auf den neuen Server transferieren
Dieser Schritt kann übersprungen werden, wenn die Datenbank auf dem gleichen Datenbankserver kopiert werden soll.
Da die Datenbank nun in eine .sql Datei exportiert wurde kann sie auf den neuen Server (am Beispiel IP: 192.168.1.155) übertragen werden. Eine einfache Möglichkeit bietet der Befehl “scp”. Das Programm ist auf allen gängigen Linux Distributionen vorinstalliert und sehr einfach zu bedienen. (Ihr könnt die Datei auch manuell oder mit rsync transferieren)
scp /usr/src/datenbank1.sql root@192.168.1.155:/usr/src/
Nach der Passworteingabe wird die Datei datenbank1.sql auf den neuen Server übertragen.
Datenbank am neuen Server erstellen
Auf dem Zielserver müssen wir nun eine neue MySQL Datenbank erstellen, in die der MySQL Dump vom alten Server eingespielt wird. Es können natürlich spezielle Berechtigungen gesetzt werden, das würde aber diesen Beitrag sprengen. Daher wird der Datenbankuser mit grant all privileges auf datenbank1 angelegt und dabei auf den localhost begrenzt.
mysql -u root -p
Neue MySQL Datenbank (datenbank1) erstellen:
create database datenbank1;
MySQL Datenbankbenutzer (dein-user) mit dem Passwort (dein_passwort) anlegen
grant all privileges on datenbank1.* to 'dein_user'@'localhost' identified by 'dein_passwort' with grant option;
MySQL Datenbank wiederherstellen
Der MySQL Datenbank dump (datenbank1.sql) wird nun am neuen Server in die zuvor erstelle neue Datenbank (datenbank1) wiederhergestellt. Das MySQL root Passwort wird nach der Eingabe abgefragt.
mysql -u root -p datenbank1 < /usr/src/datenbank1.sql
Gesamten MySQL Datenbankserver mit mehreren Datenbanken transferieren
Wer einen größeren MySQL Datenbankserver mit vielen Datenbanken transferieren möchte, der sollte sich am alten Server die Datenbank “mysql” mit dumpen, da dort die User Informationen, Rechte und Passwörter gespeichert sind. So ist es nicht notwendig, neben den Datenbanken auch noch die User und Passwörter anzulegen.
Kurze Zusammenfassung:
mysqldump -u root -p mysql > /usr/src/mysql.sql scp /usr/src/mysql.sql root@192.168.1.155:/usr/src/ mysql -u root -p mysql < /usr/src/mysql.sql
Nach dem Einspielen sollte unbedingt noch ein flush privileges auf der Datenbank durchgeführt werden:
mysqladmin -u root -p flush-privileges
MySQL root Passwort vergessen – ändern – zurücksetzen – reset – wiederherstellen
Wem ist es noch nie passiert ein Passwort zu vergessen oder zu verlegen? Kommt einfach gelegentlich in den besten Firmen vor. So setzt man das MySQL Server Root Passwort zurück.
Ich möchte natürlich anmerken dass es mehrere Wege gibt um das Passwort wiederherzustellen, mit folgender Methode habe ich allerdings die besten Erfahrungen gemacht.
1) MySQL Datenbank Server stoppen
/etc/init.d/mysql stop
2) MySQL Server im Safe Mode ohne Passworteingabe und ohne Netzwerk starten
MySQL wird nun im Safe Mode ohne Passwortabfrage gestartet. Da nun ohne Passwort auf die Datenbank zugegriffen werden kann wird zusätzlich mit –skip-networking der Netzwerkzugriff unterbunden (kein muss aber zu empfehlen).
mysqld_safe --skip-grant-tables --skip-networking &
3) Verbindung mit der MySQL Datenbank herstellen
mysql -u root
4) MySQL root Passwort zurücksetzen
Table mysql auswählen
use mysql;
Passwort mit folgendem Befehl ändern (dein-neues-passwort durch ein entsprechendes Passwort ersetzten)
update user set password=PASSWORD('dein-neues-passwort') where User='root';
Anschließend ein Flush Privileges durchführen und die MySQL Konsole beenden
flush privileges; quit
5) MySQL Server stoppen
/etc/init.d/mysql stop
6) MySQL Server im normalen Modus starten und Verbindungsaufbau testen
Der MySQL Server wird nun wieder im “normalen” Modus (ohne safe Mode) gestartet
/etc/init.d/mysql start
Ein Login sollte somit mit dem neuen Passwort möglich sein
mysql -u root -p
Falls noch kein Initial Root Passwort definiert wurde kann es folgendermaßen festgelegt werden: MySQL root Passwort setzen
Letzte Beiträge
- Icinga 1.9 Installation unter Debian squeeze + wheezy – aktuellste Version
- QuickTipp: klassischen GNOME Desktop (classic GNOME) unter Ubuntu installieren
- Debian-Ubuntu apt-get: The Following Packages Were Automatically Installed And Are No Longer Required
- Debian 7.0 Wheezy veröffentlicht – Das sind die Neuerungen
- Apache Webserver Directory Listing (Verzeichnisauflistung) deaktivieren / aktivieren



