Umleitung auf einen anderen DNS-Namen und erzwingen von HTTPS innerhalb eines VirtualHosts

Wenn man eine Webseite mit mehreren DNS-Namen betreibt, möchte man meistens nur ein SSL-Zertifikat für diese erwerben. Eine solche Webseite wird bei einem Apache Webserver zudem meistens innerhalb eines VirtualHost konfiguriert. Daraus ergibt sich somit die Anforderung, innerhalb eines VirtualHost bei einem Apache Webserver gleich zwei Weiterleitungen zu konfigurieren.

  1. Eine Weiterleitung von http://<hostname1>.<domain>.de auf http://<hostname2>.<domain>.de
  2. Eine Weiterleitung von  http://<hostname2>.<domain>.de auf https://<hostname2>.<domain>.de

Damit der Browser keine Warnmeldung ausgibt, muss dass Zertifikat für den richtigen DNS-Namen ausgestellt sein. Deshalb ist es sehr wichtig, dass die Weiterleitungen nicht gleichzeitig sondern nacheinander ausgeführt werden. Beim ersten Aufruf der Seite muss nur auf den zweiten DNS-Namen umgeleitet werden. Beim zweiten Aufruf der Seite (der dann ja schon über den zweiten DNS-Namen erfolgt) muss dann von HTTP auf HTTPS umgeleitet werden.

Die serverseitige Umleitung von einer URL auf die andere Erfolg bei Apache üblicherweise über das Modul mod_rewrite. Bevor man dieses verwendet, muss es aktiviert werden. Dies geschieht bei Debien oder Ubuntu mit den folgendem Befehl.

a2enmod rewrite

Danach muss der Apache neu gestartet werden, damit das Modul geladen wird. Dies erledigt man bei einem neueren Ubuntu z.B. mit dem folgenden Befehl.

service apache2 restart

Die Regel für eine Weiterleitung besitzt bei Apache sogenannte Flags. Diese legen die genaue Funktionsweise der Weiterleitung fest. Um eine Weiterleitung durch Ersetzen zu erreichen wird das Flag R benötigt. Das Flag R steht für Replace und bedeutet, dass Teile der URL durch etwas anderes ersetzt werden. Wenn die Weiterleitung zudem dauerhaft sein soll, ist bei dem Flag R zudem ein Grund 301 hilfreich. Dieser Grund signalisiert, dass die Weiterleitung dauerhaft sein soll. Das Flag wird dann als „R=301“ geschrieben.

Obwohl die Konfiguration für beide Weiterleitungen in der Konfiguration von demselben VirtualHost steht, darf nur eine zur Zeit ausgeführt werden. Dies wird durch das Flag L erreicht. Dieses Flag steht für Last und bedeutet, dass beim Greifen der Rewrite-Regel keine weitere Rewrite-Regel ausgeführt wird. Es wird also immer nur eine Regel pro Aufruf ausgeführt.

Zudem ist wichtig, dass als erstes die Regel für die Weiterleitung auf den ersten DNS-Namen kommt. Erst danach darf die Regel für die Weiterleitung auf HTTPS kommen.

Wenn man all diese Bedingungen beachtet, sollten Rewrite-Regeln wie folgt aussehen.

RewriteEngine on
RewriteCond %{HTTP_HOST}   ^hostname1\.domain\.de$ [NC]
RewriteRule   ^/(.*)$ http://hostname2.domain.de/$1  [R=301,L]
 
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Weitere Informationen zum mod_rewrite gibt es auf den entsprechenden Webseiten beim Apache-Projekt unter http://httpd.apache.org/docs/current/mod/mod_rewrite.html oder https://httpd.apache.org/docs/current/rewrite/flags.html zu finden.

SVN auf einem Ubuntu 14.04 mit Plesk installieren

Ich habe Heute ein SVN (Subversion) auf einem Ubuntu 14.04 Server mit einem SVN Plesk 12.5 installiert. Damit dies gelingt muss man ein Kleinigkeiten beachten. Zudem gibt es diverse Anleitungen im Netz, die sich nicht an die Vorgaben von Plesk halten. Wenn man eine solche Anleitung befolgt, kann dies Folgeproblemen verursachen. Kurz um … ich beschreibe hier mal, wie man die Installation richtig macht.

1. Installation von svn aus den Paketquellen von Ubuntu
Dazu loggt man sich per ssh auf dem Server ein und installiert die Pakete mit dem folgenden Befehl (muss als root ausgeführt werden):

apt-get install subversion libapache2-svn

2. Eine Subdomain in Plesk anlegen
In meinem Fall heißt die Subdomain save. Wie das geht ist im Handbuch von Plesk zu finden: https://docs.plesk.com/de-DE/12.5/customer-guide/websites-und-domains/domains-und-dns/hinzufügen-von-subdomains.65180/

3. Authentifizierung und die SVN-Einstellungen in die Konfiguration des vHost einbauen
Damit diese Konfiguration bei Änderungen in Plesk nicht überschrieben wird, sollte man sie über das Webinterface von Plesk einbauen. Dazu muss man in die „Web Server Settings. Um dorthin zugegangen, klickt man auf der Linken Seite auf „Hosting Services“ Domains bei der richtigen Domain auf „Hosting Settings“ Es geht ein Reiter auf. Auf diesem findet man die „Web Server Settings“
Plesk 12.5 Web Server Settings
Dort trägt man dann als „Alditional direktives“ für HTTP und HTTPS (sofern man https nutzen möchte) die folgenden Zeilen ein (dabei die Domain und Subdomain anpassen!):

<Location /svn>
DAV svn
SVNParentPath /var/www/vhosts/[DOMAIN NAME]/subdomain-name
SVNListParentPath On
 
AuthType Basic
AuthName "SVN Authorization Realm"
AuthUserFile /etc/apache2/mods-enabled/dav_svn.passwd
Require valid-user
</Location>

4. Benutzer, Verzeichnis und Repository anlegen
Dazu gibt man als root die folgenden Befehle ein:

htpasswd -c /etc/apache2/mods-enabled/dav_svn.passwd USERNAME
cd /var/www/vhosts/DOMAIN/subdomains/subdomain-name
mkdir svn
svnadmin create svn/projektname
chown -R www-data:www-data svn/
service apache2 restart

Danach sollte das SVN laufen. Falls nicht, sind hier noch ein paar weiterführende Informationen zur Fehlerbehebung zu finden: https://talk.plesk.com/threads/basic-subversion-svn-on-plesk-12-5.338617/

ISPConfig: Upgrade von Ubuntu 10.04 auf 12.04

Ich habe heute mal einige Server die ich mit ISPConfig (aktuell Version 3.0.5.2) verwalte auf Ubuntu 12.04 aktualisiert. Nachdem Ubuntu 12.04 nun ziemlich genau ein Jahr draußen ist, war die Zeit nach meiner Meinung reif für ein Upgrade.

Das Upgrade lief auch ohne größere Probleme durch. Ich habe aber bei MySQL aus Kompatibilitätsgründen wieder MyISAM als Standard-Tabellentyp eingestellt. Dies kann mit der Zeile

default-storage-engine = MyISAM

in der Datei /etc/mysql/my.cnf bewerkstelligt werden.

Des weiteren hat Postfix ein bisschen rumgezickt. Beim starten hat es einige Zeilen in der main.cf und master.cf angemaul, die nicht mehr unterstützt werden. Diese kann man aber einfach auskommentieren. Außerdem lief die SASL-Authentifizierung von Postfix nicht mehr. Deshalb konnte man keine E-Mails per Authentifizierung verschicken. Die Lösung des Problems wird im Launchpad unter der folgenden URL aber schon beschrieben: https://bugs.launchpad.net/ubuntu/+source/cyrus-sasl2/+bug/875440/comments/34. Offensichtlich hat sich hier in der Schreibweise einiger Parameter etwas geändert. Wenn man die Datei /etc/postfix/sasl/smtpd.conf wie folgt abändert, läuft es wieder:

pwcheck_method: saslauthd
mech_list: plain login pam
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: [entfernt]
sql_passwd: [entfernt]
sql_database: dbispconfig
sql_select: select password from mail_user where login = '%u@%r'

Die wichtigsten URL Escapecodes

Da ich in der Vergangenheit immer wieder im Internet gesucht habe, schreibe ich mir hier mal die wichtigsten URL Escapecodes auf. Ich hoffe das hilft auch anderen weiter.

  • SPACE = %20
  • < = %3C
  • > =%3E
  • # = %23
  • % = %25
  • { = %7B
  • } = %7D
  • | = %7C
  • \ = %5C
  • ^ = %5E
  • ~ = %7E
  • [ = %5B
  • ] = %5D
  • ` = %60
  • ; = %3B
  • / = %2F
  • ? = %3F
  • : = %3A
  • @ANTISPAM@ = %40
  • = = %3D
  • & = %26
  • . = %2E
  • ! = %21