QuickTipp: Weiterleitung (redirect) von HTTP auf HTTPS via Apache oder Htaccess

apache logo

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

Montag, 25. Februar 2013 Apache, Linux, WebServer 2 Kommentare Author: Patrick

QuickTipp: Cron Daemon Mails deaktivieren – Cronjob ohne Ausgabe Email

terminal-icon

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"
Mittwoch, 20. Februar 2013 Linux 7 Kommentare Author: Patrick

QuickTipp: Cronjob Skript Ausgabe in Datei umleiten (loggen) – cron – crontab

terminal-icon

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

Dienstag, 19. Februar 2013 Linux 2 Kommentare Author: Patrick

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.

Donnerstag, 14. Februar 2013 WebServer 10 Kommentare Author: Patrick

Zum Valentinstag: Enterprises love LINUX, do you?

Linux Liebe zum Valentinstag

 

(Quelle: Gazzang)

Donnerstag, 14. Februar 2013 Linux Keine Kommentare Author: Patrick

MySQL Datenbank transferieren – sichern und wiederherstellen – kopieren – Linux Konsole

mysql logo

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
Donnerstag, 07. Februar 2013 Linux, MySQL, WebServer 9 Kommentare Author: Patrick

MySQL root Passwort vergessen – ändern – zurücksetzen – reset – wiederherstellen

mysql logo

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

Donnerstag, 31. Januar 2013 Linux, MySQL 1 Kommentar Author: Patrick
rssfeed google+ youtube
Hosting-Lösungen (VPS, Dedicated Server, Webspace und Colocation) von Contabo

Subscribe to our mailing list

* indicates required Email Adresse *
Blogverzeichnis - Blog Verzeichnis bloggerei.de
Werbung schalten

*=Affiliatelink