Dez 102016
 

Wie kann man nahezu unterbrechungsfrei eine Apache Website auf eine neue IP-Adresse umziehen, ohne warten zu müssen, bis die neue IP-Adresse weltweit bekannt ist (abhängig von der TTL der DNS-Einträge)?

Ziel: Zugriffe auf die alte IP-Adresse sollen auf die neue weitergeleitet werden, bis allen Clients die neue IP-Adresse bekannt ist.

Um dies zu erreichen, sollte auf dem alten Server, direkt nach Kopieren der Daten auf den neuen Server, mit a2enmod proxy_http das http-Proxy-Modul des Apache eingeschaltet werden. Der alte Webserver kann dann eine Konfiguration wie diese bekommen:

<VirtualHost *:80>
        ServerAdmin webmaster@domain.xy
        ServerAlias www.domain.xy www2.domain.xy
       
        ProxyPreserveHost On
        ProxyPass / http://123.123.123.123/
        ProxyPassReverse / http://123.123.123.123/

        ErrorLog /var/log/redirect-error_log
        CustomLog /var/log/redirect-access.log combined
</VirtualHost>

Im Beispiel: www.domain.xy und www2.domain.xy sind die Hostnamen der umziehenden Website, 123.123.123.123 ist die IP-Adresse des neuen Webservers.
Voraussetzung: Der alte Webserver darf http-Verbindungen nach außen, speziell zum neuen Webserver aufbauen. Diese Umleitung funktioniert auch bei Namedvirtualhosts auf dem neuen Server.

Dez 092016
 

Voraussetzung für die Installation eines DATEV 10.0 Arbeitsplatzes (genauer: DATEV 10.0 mIDentity, SmartCard, Sicherheitspaket) auf einem Windows 7 System, ist das SHA-2-Update (KB3033929) von Microsoft.

Allerdings lässt dieses sich teilweise nicht installieren: Meldung, es sei bereits installiert, obwohl dies nicht der Fall ist.

Der hierfür von DATEV angebotene Fix brachte keine Besserung (trotz der Meldung “Ihr System erfüllt nun die Voraussetzungen für die Installation”). Infos von DATEV zum Thema: Dokument 1017539

Lösung:

  • Das Sicherheitsupdate hier herunterladen.
  • Die Datei Windows6.1-KB3033929-x64.msu entpacken, z. B. mit 7-Zip.
  • Ein cmd-Fenster mit Administratorrechten öffnen.
  • Die entpackte cab-Datei mit diesem Befehl installieren: dism /online /add-package:Windows6.1-KB3033929-x64.cab
Dez 022016
 

Hat eine Site mehrere Domains, die gemeinsam ausgewertet werden sollen (Anbindung an Google Analytics wie hier mit diesem Code), sollten alle beteiligen Domains unter “.js Tracking Informationen” in die “Verweis-Ausschlussliste” eingetragen werden.

Um identische Pfade innerhalb der verschiedenen Domains in den Berichten unterscheiden zu können, kann ein benutzerdefinierter Filter wie folgt angelegt werden:

Google Analytics 1

Die Homepage wird mal als “/”, mal als “/index.html” bzw. “/index.php” aufgerufen? In den Berichten soll dies alles gemeinsam gezählt werden. Dies realisiert folgender benutzerdefinierter Filter am Beispiel von “index.html”:

Google Analytics 2

Alle URLs in Kleinbuchstaben umschreiben? Mit diesem benutzerdefinierten Filter:

Google Analytics 3

URLs von Verzeichnissen immer mit “/” abschließen? Mit diesem benutzerdefinierten Filter:

Google Analytics 4

Alle URL-Parameter vor der Analyse abschneiden? Mit diesem benutzerdefinierten Filter:

Google Analytics 5

Eigene Zugriffe / eigene IP ausschließen? Mit diesem vordefinierten Filter:

Google Analytics 6

Warum fehlt bei der Beispieladresse das letzte Octet? Weil ich davon ausgehe, dass alle IP-Adressen anonymisiert werden, wie für Deutschland vorgeschrieben. Deshalb können eigene Zugriffe anhand der IP-Adresse natürlich nicht mehr eindeutig identifiziert werden. Bei dieser Lösung filtert man natürlich auch Zugriffe von anderen (es sei denn wir sprechen vom eigenen /24-Netz), deren IP sich nur im letzten Octet von der eigenen unterscheidet. Wen das stört, der muss eine der Lösungen ab Variante 2 von hier verwenden: http://www.thomashutter.com/index.php/2013/10/google-analytics-5-varianten-zum-ausschluss-von-internen-ips-besuchern/

 

Dez 022016
 

Um mehrere Domains, die in der Statistik zusammengefasst sein sollen, unter einer einzigen Google Analytics Property zu erfassen und trotzdem keinen hässlichen “_ga”-Parameter beim Domainwechsel an den URLs zu haben, eignet sich folgender Code:

<script>
var gaProperty = 'UA-0000000-1';
var disableStr = 'ga-disable-' + gaProperty;
if (document.cookie.indexOf(disableStr + '=true') > -1) {
window[disableStr] = true;
}
function gaOptout() {
document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
window[disableStr] = true;
}
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-0000000-1', 'auto', {'allowLinker': true});
ga('require', 'linker');
ga('linker:autoLink', ['www.dom1.xy', 'www.dom2.xy', 'www.dom3.xy'] );
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
$(window).load(function() {
currentURL = window.location.href;
newURL = currentURL.replace(/&_ga(\=[^&]*)?(?=&|$)|_ga(\=[^&]*)?(&|$)/,"");
if(newURL.substr(-1) === "?"){newURL = newURL.slice(0, - 1)}
history.replaceState("state", "", newURL);
});
</script>

Beispiel-Sites im Code: www.dom1.xy, www.dom2.xy, www.dom3.xy, Beispiel-Property im Code: UA-0000000-1

Weitere Hinweise zu Google Analytics