Das Putzlowitsch Test- und SEO-Blog

Strato PowerPlus mit SpeedPlus – Fehler bei der Remote-Adresse (REMOTE_ADDR)

Nachtrag am 22.01.2010:

Seit heute scheint das weiter unten geschilderte Problem mit der Remote-Adresse nicht mehr zu bestehen. Die Einträge in der .htaccess-Datei oder sonstige Eingriffe sind daher möglicherweise nicht mehr erforderlich.
Bei mir ist das Problem verschwunden, aber offensichtlich noch nicht generell.

Nachtrag am 01.03.2011:

Nach aktuellen Informationen ist das Problem wohl nun doch endgültig behoben worden. Die Einträge in der .htaccess-Datei oder sonstige Eingriffe sind daher nicht mehr erforderlich.

Seit Anfang Dezember 2009 bin ich mit meiner Schnurpsel-Seite wieder zurück zu Strato umgezogen. Ganz weg war ich ja nicht, ich hatte nur den Hostnamen bei einem anderen Anbieter aufgeschaltet. Aber seit es nun SpeedPlus bei Strato gibt, bin ich nun doch wieder zurückgekehrt.

Die Geschwindigkeit ist wirklich gut. Antwortzeiten von ungefähr 0,5 Sekunden gegenüber 3 bis 4 Sekunden vorher sind für ein PHP-Schwergewicht wie WordPress eine merkliche Verbesserung. Zudem wurde auch gleich das ohne-www-Problem beseitigt, in der Umgebungsvariable HTTP_HOST steht nun der tatsächlich im HTTP-Request angegebene host drin.

Die Remote-IP-Adresse (REMOTE_ADDR)

Neben allerlei anderen interessanten Informationen wird bei jedem Webseitenaufruf auch die IP-Adresse des Aufrufers in einer Umgebungsvariablen vermerkt. Auf diese kann z.B. mit Skriptsprachen wie PHP oder Perl als Variable „REMOTE_ADDR“ zugegriffen werden. Diese Remote-Adresse ist z.B. für statistische Auswertungen interessant oder kann beim Aussperren unerwünschter Zugriffe (Spam-Bots) helfen.

Allerdings zählt diese IP-Adresse ja nach Auffassung und Auslegung der Gesetze zu den personenbezogenen Daten und dürften dann eigentlich nicht gespeichert werden. Bei Strato werden die IP-Adressen in den den Kunden zur Verfügung gestellten Serverlogdateien in anonymisierter Form gespeichert. Auch die im Kundenmenü anzeigbare Webseiten-Statistik greift auf diese Daten zurück.
So können die Zugriffe zwar unterschieden aber nicht einem konkreten Anschluß zugeordnet werden

Mehr Geschwindigkeit mit SpeedPlus

Wenn ich die Grafik zu SpeedPlus bei Strato richtig deute, werden die Zugriffe nicht mehr direkt auf die Webserver geroutet, sondern von einem Loadbalancing-Cluster lastabhängig verteilt.
Diese Verteilung funktioniert vermutlich ähnlich wie bei einem nicht-transparenten Proxy, denn für den Webserver sieht es so aus, als würde der Strato-interne Server die Seite anfordern. Genau deshalb steht in der Remoteadresse nicht mehr die IP-Adresse des Aufrufers drin, sondern eine 81.169.145.xxx drin.

Komischerweise tritt der Effekt aber nicht bei allen Domains auf, nur die Hälfte meiner Domains (inkl. Subdomains) bei Strato ist davon betroffen.

Die richtige Remoteadresse ermitteln und setzen

Ich wäre ja nicht Schnurpsel, hätte ich nicht bereits eine Lösung für das Problem parat :-)
Die richtige IP-Adresse findet man im Request-Header-Feld X-Forwarded-For, daß heißt der Strato-Server trägt hier die Adresse ein, von der er die Anforderung erhalten hat.

In Skriptsprachen wie PHP oder Perl steht diese Variable als „HTTP_X_FORWARDED_FOR“ zur Verfügung. Hier könnte man sich die Remote-Adresse also einfach möglichst am Anfang (bei WP z.B. in der wp-config.php) der Abarbeitung in die REMOTE_ADDR eintragen, z.B. so:

if( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
  $ip_addr = @trim( @end( @explode( ",", $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) );
  if( '' != $ip_addr )
    $_SERVER['REMOTE_ADDR'] =  $ip_addr;
}

Hier kommen zwei wichtige Aspekte zum Tragen, denn in „X-Forwarded-For“ können mehrere durch Komma getrennte IP-Adressen stehen, sofern unterwegs mehrere Proxies durchlaufen wurden. Außerdem soll die Adresse nicht überschrieben werden, falls kein X-Forwarded-For-Feld existiert oder aus anderem Grund nicht ermittelt werden kann.

Für Perl könnte das etwa so aussehen:

if( $ENV{'HTTP_X_FORWARDED_FOR'} ne "" )
{
  my @ip_list = split(/,/, $ENV{'HTTP_X_FORWARDED_FOR'});
  $ENV{'REMOTE_ADDR'} = $ip_list[-1]; 
}

Nachteil ist hierbei natürlich, daß man alle Webapplikationen, die irgendwie die REMOTE_ADDR verwenden, entsprechend anpassen muß. Es geht aber auch noch einfacher und allgemeiner.

Umgebungsvariablen mit mod_setenvif setzen

Das Apache-Modul mod_rewrite kennen bestimmt viele WordPress-Nutzer, manch einer kennt vielleicht sogar mod_alias, aber vermutlich nur wenige haben schon mal etwas vom Modul mod_setenvif gehört. Es kommt auch ganz bescheiden und unspektakulär mit nur vier Anweiungen daher.

Mit dem Modul mod_setenvif hat man die Möglichkeit, Umgebungsvariablen abhängig von Request-Feldern zu setzen. Genau das brauchen wir hier. Wir haben das Request-Feld X-Forwarded-For und wollen abhängig davon die Umgebungsvariable REMOTE_ADDR setzen. Das Problem läßt sich mit ein bißchen Regular-Expression in einer Zeile in der .htacces erschlagen:

SetEnvIf X-Forwarded-For "(.+,)? *(.+)$" REMOTE_ADDR=$2

Optimalerweise steht diese Zeile ganz am Anfang einer .htaccess im Wurzelverzeichnis des Webpaketes. Dann wirkt sei auch auf alle Domains oder Subdomains, die ihr sichtbares Wurzelverzeichnis in einem Unterverzeichnis des Webspace haben.

Das schöne an diesem kleinen Eingriff ist, daß er auch auf das Serverlogfile und die Webstatistik wirkt. Im Logfile stehen nun wieder zwar anonymisierte, aber unterscheidbare Zugriffe und die Webstatistik zeigt nicht mehr 10000 Zugriffe von nur 5 Adressen an.

Ende gut, alles gut?

Mit ein bißchen Handarbeit kann man wieder mal einen Strato-Konfigurationsfehler ausbügeln. Andereseits ist die SpeedPlus-Plattform noch recht neu, da können solche Fehler schon mal auftreten. Ich habe das Problem auch bereits vor 10 Tagen an den Strato-Support gemeldet, warte aber immer noch auf die Antwort zu meinem Ticket. Scheint etwas komplizierter zu sein. Bis zur Strato-Problemlösung kann mein kleiner „Trick“ zumindest über die Zeit helfen.

7 Kommentare »

WordPress beim 1&1 Webhosting (1&1 Homepage)

In den aktuellen 1&1 Webhosting-Paketen „1&1 Homepage Perfect“, „1&1 Homepage Business“ und „1&1 Homepage Business Pro“ hat man neben der Nutzung eines 1&1-Fertigblogs auch die Möglichkeit, ein eigenes WordPress zu installieren. Mindestens eine MySQL-Datenbank und PHP können in diesen Hostingpaketen genutzt werden.

Damit das selbstinstallierten WordPress auch ordentlich funktioniert, sind einige Dinge zu beachten, die ich nachfolgend erkläre. In vielen Fällen verweise ich auf die 1&1-FAQ, da dort einzelne Schritte gut beschrieben sind.

Vorbereitung der Installation – Datenbank

Zunächst muß, falls nicht schon geschehen, eine neue MySQL 5 Datenbank angelegt werden. Wichtig sind hier die Daten, welche später in die Datei wp-config.php eingetragen werden müssen (Beispiele):

define('DB_NAME', 'db123456789');
define('DB_USER', 'dbo123456789')
define('DB_PASSWORD', 'rh473256');
define('DB_HOST', 'db1234.1und1.de');

Auf den ersten Blick sehen DB_NAME und DB_USER gleich aus, sind sie aber nicht. Beim User steht zwischen ‚db‘ und der Zahl ein kleines o (für Owner?). Zudem ist der Datenbank-Host eben nicht ‚localhost‘, sondern der nach dem Anlegen der Datenbank in der Übersicht angezeigte dbxxxx.1und1.de.

Vorbereitung der Installation – WordPress-Installationspaket

Die aktuelle deutsche WordPress-Version kann man sich hier herunterladen. In der Installationsanleitung werden als nächste Schritte das Entpacken der ZIP-Datei, Editieren der wp-config.php und das Hochladen aller Dateien per FTP genannt. Für 1&1 empfehle ich eine leicht veränderten, weil schnelleren Weg, der ohne zusätzliches FTP-Programm auskommt.

Mit dem 1&1-WebspaceExplorer wird die wordpress.zip-Datei, so wie sie ist, hochgeladen. Anschließend wird sie direkt auf dem Server entpackt. Beim Entpacken entsteht ein Verzeichnis wordpress, welches man nach eigenen Wünschen umbenennen kann.

Nun holt man sich per Download aus diesem Verzeichnis die wp-config-sample.php auf den Rechner, bennent sie in wp-config.php um, trägt die Konfigurationsdaten ein und lädt sie mit dem WebspaceExplorer in das WordPress-Verzeichnis auf dem Server.

Umstellung auf PHP 5

(nicht erforderlich bei den neuen Paketen SmartWeb L und Dual-Hosting!)
An erster Stelle ist die Umstellung auf PHP5 zu nennen. Mit PHP4 gibt es besonders im WordPress-Backend Probleme, beispielsweise beim Hochladen von Bildern über die Medienverwaltung. Wie man bei 1&1 erreichen kann, daß alle PHP-Skripte mit PHP 5 ausgeführt werden, ist auch in den 1&1-FAQ beschrieben. Man erstellt eine Datei .htaccess oder ergänzt eine bereits vorhandene Datei mit folgenden Zeilen:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Diese Datei kopiert man per FTP oder mit dem 1&1-WebspaceExplorer in das Wurzelverzeichnis der Webpräsenz

WordPress installieren

Nun kann man die WordPress-Installation wie in der Dokumentation beschrieben starten:

http://wp-example.net/wp-admin/install.php

Maximal nutzbarer PHP-Speicher (memory_limit) 32M

Auch wenn für den PHP-Speicher bei 1und1 40M angezeigt werden, so sind doch nur effektiv 32M nutzbar. Deshalb kann durchaus folgende Fehlermeldung auftreten:

Fatal error: Out of memory (allocated 33030144)
(tried to allocate 4600 bytes) in …

Das ist etwas anderes als:

Fatal error: Allowed memory size of 33554432 bytes exhausted
(tried to allocate 4650 bytes) in …

Der Fehler kann z.B. beim automatischen Update von WordPress vorkommen, obwohl WP intern das Speicherlimit auf 256M hochsetzt und das auch so angezeigt wird. Aber egal wie hoch man den Parameter memory_limit konfiguriert, es gibt bei 1&1 derzeit die Grenze bei 32 MB. Hier hilft nur, während des Updates den Speicherverbrauch zu reduzieren, indem man beispielsweise alle Plugins vorher deaktiviert und danach wieder aktiviert.

Auf eine Supportanfrage bei 1&1 bezüglich der 32M-Speichergrenze bekam ich folgende Antwort:

Effektiv liegt das von Ihnen nutzbare Speicherlimit bei 32 MB, da ein Teil der Ressourcen für die Ausführung von PHP selbst benötigt wird.

Nun ja, wirklich glauben kann ich das nicht.

Nachtrag:
Es gibt jetzt eine 1&1-Hilfe-Seite, die die Skript-Limits für die einzelnen alten und aktuellen Hostingpakete auflistet.
Bei den neuen 1&1-Dual-Tarife ist PHP5 standardmäßig aktiv und es gelten folgende Limits:

Memory Limit Scriptlaufzeit Anzahl Prozesse
Smart Web L 32 MB 10 Sec. 5
Dual Basic 60 MB 20 Sec. 10
Dual Perfect 60 MB 30 Sec. 15
Dual Advanced 80 MB 40 Sec. 15
Dual Unlimited 80 MB 60 Sec. 20

Bei den 1&1-Tarifen (ab Oktober 2013) gelten folgende Limits:

Memory Limit Scriptlaufzeit Anzahl Prozesse
Starter 30 MB 20 Sec. 10
Basic 60 MB 20 Sec. 10
Unlimited 80 MB 40 Sec. 15
Unlimited Plus 128 MB 60 Sec. 16
Unlimited Plus (4GB) 256 MB 60 Sec. 16

Bei den neuen 1&1-Tarifen (ab 2015) gelten folgende Limits:

Memory Limit Scriptlaufzeit Anzahl Prozesse
Starter 30 MB 20 Sec. 10
Unlimited 60 MB 20 Sec. 10
Unlimited Plus 80 MB 40 Sec. 15
Unlimited Pro 128 MB 60 Sec. 16

Hinweis: Das Speicher-Limit gilt für einen gestarteten Prozess. Es steht deshalb als PHP-Speicher weniger zur Verfügung, als hier in der Tabelle steht. Von den 60M im Paket Basic sind effektiv ca 55M als PHP-Speicher nutzbar.

PHP-Speichertest-Skript: Memory-Test PHP-Skript

28 Kommentare »

Spam-Kommentare, die beliebtesten Artikel

Viel Kommentarspam kommt hier ja nicht an. In den Monaten September, Oktober und November waren es insgesamt etwa 600 Versuche, automatisch einen spammigen Kommentar bei einem Artikel oder einer Seite zu hinterlassen. Diese Versuche werden allerdings gleich an der Türe abgebügelt, kommen gar nicht erst bis zur Datenbank und müssen deshalb auch nicht moderiert oder gelöscht werden.

Was mich schon immer interessiert, nach welchen Gesichtspunkten wählen die Spambots Ihre Zielseiten aus. Gibt es irgendein System oder wird einfach zufällig gestreut? Ich habe dashalb alle Spamversuche aus den drei oben genannten Monaten aufsummiert und eine kleine Tabelle erstellt:

Nr Artikel/Seite Spam PR Kom
1 123 Moderate Comment Notification 21,3% 3 3
2 Es geht doch, Kontaktformular mit POST und Permalinks 17,1% 1 3
3 WordPress und die suboptimale MySQL-Optimierung (5.0.51) 14,7% 2 42
4 Privat: 123 MetaBlog 11,9% 2 2
5 WordPress 2.3 – Anonym up-to-date bleiben 5,9% 2 14
6 WordPress 2.3 – Problem ohne www bei Strato 5,2% 2 82

Ich habe nur die Seiten und Artikel berücksichtigt, die 5% oder mehr am Spamaufkommen ausmachen. In der Spalte PR steht der aktuelle Google-Pagerank und in der Spalte Kom die Anzahl der abgegebenen und freigeschalteten Kommentare.

Alle Seiten oder Artikel sind schon mindestens ein Jahr alt. Der Artikel „WordPress 2.7 – Wartungsmodus ohne Plugin“ mit dem höchsten Pagerank (4) gehört mit 0,8% nicht zu den Favoriten der Spambots, allerdings immerhin zwei der Seiten mit den meisten Kommentaren.

Was kann man nun daraus schließen? Nichts, würde ich sagen :-)
Es gibt wohl kein offensichtliches Muster, nachdem sich die Spambots die Artikel aussuchen, zumindest kann ich keins erkennen.

Interessant fand ich allerdings die Tatsache, daß zwar selten, aber ab und zu doch Kommentarspam fast in Echtzeit auftauchte, nur wenige Stunden nach Veröffentlichung eines Artikels. Rekord war dabei mal eine knappe halbe Stunde. Schon erstaunlich.

Keine Kommentare »

Twitter – Links werden falsch umgesetzt

Twitter Linkfehler

Ich bin ja kein Freund von diesen URL-Verkürzungsdiensten. Bei Twitter kommt man allerdings praktisch nicht drumrum, die Links möglichst kurz zu halten. Einerseits um natürlich nicht so viele von den kostbaren 140 Zeichen zu verschwenden. Andererseits schlägt bei Links mit mehr als 30 Zeichen automatisch der bit.ly-Verkürzer zu, ob man das nun will oder nicht. Deshalb verwende ich für Links auf eigene Blogbeiträge den in WordPress schon eingebauten „Shortlink-Dienst„, der einfach über die Artikel-ID funktioniert und zwar immer, egal ob und was man nun bei den Permalinks eingestellt hat.

Bisher wurde diese Links im Twitter-Webinterface auch brav wie alle anderen Links anklickbar umgesetzt. Heute ist mir nun aufgefallen, daß die Anklickbarkeit direkt mit dem Hostnamen endet. Also klickt man sich nur zur Startseite und nicht zum konkreten Artikel. Es scheint so zu sein, daß ab dem Fragezeichen alles ignoriert wird. Finde ich nicht gut und hoffe, daß das nicht so bleibt. Oder ist es gar kein Bug, sondern ein Feature? Aber wozu soll das gut sein?

Keine Kommentare »

SpeedPlus – Strato macht PHP-Anwendungen schneller

Daß ich das noch miterleben darf! Strato hat es tasächlich geschafft, die Performance von PHP-Webapplikationen wie WordPress, Joomla, Typo3 oder Drupal deutlich zu verbessern. „SpeedPlus“ heißt das Kind und wird in einer entsprechenden Pressemitteilung etwas ausführlicher erläutert.

Und nun kommt auch schon die schlechte Nachricht. Von SpeedPlus profitieren derzeit nur Webhostingpakete der PowerPlus-Klasse. Mit BasicWeb und DynamiX guckt man geschwindigkeitsmäßig weiterhin in die Röhre.

Zwar werden in der Pressemitteilung nur die Neukunden erwähnt, aber teilweise werden wohl auch Bestandskunden mit den passenden Tarifen umgestellt. So erhielt ich vorhin einen Anruf vom technischen Support bezüglich meines Tickets 1034031, welches ich angeblich am 16.11. durch eine telefonisch Anfrage initiiert haben soll. Ich bin zwar manchmal etwa vergeßlich aber in dem Fall sehr sicher, daß ich da nicht angerufen hatte. Aber egal, zumindest wurden vom Support ein paar technische Fragen zur Umstellung geklärt und eine halbe Stunde später ging mit meiner WordPress-Testinstallation richtig die Post ab.

Antwortzeiten von etwa einer halben Sekunde gegenüber 3 bis 4 Sekunden vorher sind schon eine angenehme und merkliche Verbesserung. Zudem wurde das ohne-www-Problem beseitigt, es wird also im HTTP_HOST der tatsächlich im Request angegebene host zurückgeliefert.

Im Moment gibt es eigentlich nur noch einen Grund, der mich davon abhält, mit meiner Schnurpsel-Seite wieder zu Strato zurück umzuziehen. Der hoffnungslos veraltete und damit fehlerhafte WebDatabaseManager in Gestalt von phpMyAdmin-Version 2.6.4-pl3 ist nun wirklich keine Glanzleistung für einen der großen Webhoster in Deutschland.

Vielleicht gibt es ja auch noch ein Update für den „WebDatabaseManager“, dann könnte man sogar Strato mit den PowerPlus-Webhostingpaketen für WordPress empfehlen. Das kleinste PowerPlus-Paket, welches ich hier selbst habe, kostet übrigens derzeit 6,90 Euro und ist mit der aktuellen Aktion bis zum 31.12. für die ersten 6 Monate umsonst.

23 Kommentare »