WordPress Webseite mit Nginx auf Ubuntu Server beschleunigen

Das Internet wird jeden Tag größer und schneller, und jede Webseite oder jedes Blog, das eine hohe Reichweite hat kennt das Problem: Der Traffic zwingt irgendwann den Server in die Knie. Nun steht man vor der Wahl: Hat man die finanziellen Mittel, besorgt man sich neue Hardware, denn je besser ein WebServer ist, umso mehr Anfragen kann er gleichzeitig bearbeiten. Zusätzlich kann man auch die WebSeite optimieren, also CSS Dateien zusammen fassen, Bilder in Sprites packen und wenn möglich sogar Javascript zusammentun, beziehungsweise auslagern und statischer Content kann mit einer Cache-Zeit von über 30 Tagen ausgestattet werden. Nur was ist, wenn all das absolut nicht mehr klappt?

Dies ist uns passiert, die Besucherzahlen liefen stabil nach oben und Google hat uns sehr gut platziert. Um genau zu sein auf Platz 1 der Newskategorie „Technik/Wissenschaft“, direkt in der Schlagzeilenübersicht auf der news.google.de Startseite,  was zwar wirklich toll war, nur lieferte uns Google in diesem Moment mehr als 250 Anfragen … pro Sekunde. Unser sowieso schon angeschlagener Apache2 brach gnadenlos zusammen, ohne das wir was tun konnten. Der ganze Spaß wiederholte sich noch 2 mal und wir versuchten herauszufinden warum. Ich muss dazu sagen, dass unser Server mit 2 CPUs ausgestattet ist und über 8 GB RAM verfügt und außer nodch.de nichts anderes auf der Hardware lief. Wir kamen relativ schnell zu dem Entschluss, dass Apache schuld ist. Der Server stand permanent unter Dauerlast, der Arbeitsspeicher jedoch fühlte sich unnütz. Man sollte sich also genau fragen wo Flaschenhälse sind: Hardware, Software oder die Serversoftware.

Wir haben uns dazu entschieden Apache abzusetzen und durch Nginx (gesprochen: „Engine X“) zu ersetzen. Nginx bezeichnet sich selbst als „high performance web server“ der effektiver als Apache arbeitet und dabei sogar weniger Speicher verbraucht. Installation, Einrichtung und Gebrauch sind ebenso einfach wie bei Apache.

Gängige Apache Konfigurationen sehen in der Regel immer gleich aus:

Es läuft ein Apache2 Server in mehreren Instanzen, PHP und MySQL Modul sind einkompiliert und werden als Extension geladen. Es werden vhosts definiert und größtenteils werden per .htaccess Datei spezifische Einstellungen vorgenommen.

Genau da liegt das Problem: Ist beispielsweise PHP mit einkompiliert, wird PHP bei jedem Request an den Server geladen, was unter dem Strich enorm Ressourcen nutzt. Apache wertet außerdem .htaccess Daten mit jedem Request neu aus. Jeder kann sich selbst zusammenreimen was passiert wenn da mehr als 100 Anfragen pro Sekunde reinkommen und die Hardware eher normal ist. 🙂

Nginx ist im Vergleich zu Apache jetzt nicht das Torschlagargument, aber die Unterschiede sind schon deutlich. Grade wenn es um statischen Content geht, ist Nginx um einiges schneller als Apache. PHP wird in Nginx per FastCGI angebunden, was den Vorteil hat, dass die PHP Worker gespawnt im System liegen und nur auf Arbeit warten. Nginx kann so konfiguriert werden, dass PHP nur ausgeführt werden soll, wenn es denn auch nötig ist. Apache mit FastCGI zu verwende ist zwar auch möglich, nur nutzen das leider die Wenigsten.

Ich möchte euch in einer kleinen HowTo-Reihe die Einrichtung von Nginx auf Ubuntu zeigen und erklären wie die verborgene Performance der Hardware optimal genutzt werden kann. Dabei beziehe ich mich auf eine WordPress Installation. Ich persönlich bin Begeistert vom enormen Performancesprung von nodch.de, den wir mit dieser Konfiguration erreichen konnten.

Wie das alles im Detail funktioniert, installiert und eingerichtet wird, wollen wir euch natürlich nicht vorenthalten!

[sws_divider_top]

Teil 0: Einführung
Teil I: Installation der aktuellen Nginx-Version auf Ubuntu
Teil II: Installation von MySQL und PHP
Teil III: Nginx konfigurieren und PHP als FastCGI bereitstellen
– Alternativ: PHP-FPM Installieren und bereitstellen (folgt !)
Teil IV: Nginx für WordPress optimieren

Ich versuche übrigens jeden Tag mindestens einen Artikel zu Reihe zu veröffentlichen.

18 Gedanken zu „WordPress Webseite mit Nginx auf Ubuntu Server beschleunigen

    • Dienstag 13th September 2011 um 19:09
      Permalink

      Ich hab ehrlich gesagt schon auf deinen Kommentar gewartet 🙂
      Ich werd morgen gegen Abend den ersten Teil online stellen .. im Idealfall siehst du in 5 Tagen alles 😉

      • Mittwoch 14th September 2011 um 16:33
        Permalink

        Ja auf Arbeit habe ich einfach zu wenig Zeit aber abends kann ich dann immer reinschauen und das neu gelesene umsetzen 😉

          • Mittwoch 14th September 2011 um 18:31
            Permalink

            Jup siehts aus. Inzwischen bin ich wenigstens schon mal bei einem 502 irgendwo habe ich noch irgendwas verhauen aber ich habe endlich Errorlogs. Es kann also nur noch besser werden. 

            Aber so ist das halt wenn man von verschiedenen Seiten Infos zusammen würfelt. Aber ich habe leider ein Manko ich lerne sowas nicht wenn ich es lese, ich muss das immer selbst ausprobieren sonst bringt mir das nichts. 

            Also bitte schön weiter mit Beispielen. 

            Danke 

  • Dienstag 13th September 2011 um 22:19
    Permalink

    Hi,

    habe von einiger Zeit auch ein paar HowTos / Tutorials zum Thema „Nginx“ geschrieben, ggf. hilft das ja noch jemandem weiter: http://suckup.de/category/howto/nginx-howto/

    PS: freue mich schon auf neue Ideen und Tipps zu dem Thema 🙂

    Mfg

    • Mittwoch 14th September 2011 um 18:03
      Permalink

      Deine Config ist echt nice habe so einiges hinbekommen damit aber irgendwas habe ich verhauen.

      Nur weis ich nicht was und ohne Errorlog werde ich wohl auch nie erfahren was. 

      Ich werde mal einfach alles nach einander ausblenden 😉

  • Donnerstag 15th September 2011 um 18:50
    Permalink

    Hi, 

    habe nun mal nachgebaut was du hier veröffentlicht hast und zwar auf einer Ubuntu 10.04 VM

    Netinstall Minimal da ich apache gar nicht erst mitinstallieren wollte

    hat soweit alles funktioniert nur bei 

    $ sudo pcel install memcache
    $ sudo pcel install apc
    bekomme ich ein pcel: command not found 

    Welche Basis Installation hast du genommen für deinen Ubuntu Server ????

    habe zwar mit 

    sudo aptitude install php-apc
    sudo aptitude install php5-memcached

    Die Packete nachinstalliert bekommen weis aber nicht ob es die richtigen sind. 

    Vielleicht habe ich ja was falsch gemacht.

    G Martin

    • Donnerstag 15th September 2011 um 20:24
      Permalink

      Ist schon seltsam das pcel bei dir nicht ging. Das ist eigentlich im PEAR Paket drin. Werd nachher noch einmal prüfen ob ich nicht doch irgendetwas vergessen habe 🙂

      Es ist im übrigen egal ob man nun per PEAR oder mit apt-get installiert, die Module sind die selben am ende. Von daher ist deine Art auch richtig. 

      Aber danke erstmal für den hinwies. Und die normale Serverinstall von http://www.ubuntu.com/download/server/download geht ja auch. Muss ja nicht unbedingt Netinstall sein.

      Gruß
      Steffen

  • Pingback: Anonymous

  • Montag 19th September 2011 um 11:10
    Permalink

    Vielen Dank. Die Serie habe ich mir direkt mal in die Lesezeichen gepackt. Das werde ich bestimmt mal brauchen können.

  • Samstag 1st Oktober 2011 um 18:22
    Permalink

    Hallo, 

    ich musste mal ein paar Tage unterbrechen weil ich wegen einer Bewerbung für ein gespräch ein bissel lernen musste, aber nun bin ich wieder da. 

    Und es haben sich ein paar Fragen ergeben. 

    1. wie hinterlegst du die Config für verschiedene VHost. 
    Im speziellen nutzt du hier einzelne Dateien oder schreibst du alles in eine Conf?

    2. Wo hast du deine Vhost abgelegt?

    3. Irgendwie habe ich das mit dem Sites Avaible Sites Enabled noch nicht verstanden. 

    Kannst du das nochmal kurz erklären?

    Danke Martin aka Phoenyx

    • Sonntag 16th Oktober 2011 um 22:10
      Permalink

      Hey, sorry für die späte Antwort. Habs zuerst verpeilt und dann bin ich Umgezogen wo es untergegangen ist 🙁

      Also:

      In sites-avaible liegen alle VHosts als eigenständige Datei. also z.b:
      nodch.de
      androidblogs.de
      meinedomain.de

      In diesen Dateien enthalten ist jeweils der server{}-Bereich für den VHost wie im Tutorial erklärt.
      In der nginx.conf steht nun:

      Include /etc/nginx/sites-enabled/*.conf

      Das heißt alle Dateien aus diesem sites-enabled werden geladen, nicht aus sites-avaible. Deshalb erstellen wir links:

       
      /etc/nginx/sites-enabled/nodch.de zeigt auf /etc/nginx/sites-avaible/nodch.de usw…

      Vorteil: man kann die Seite offline nehmen ohne die Datei zu ändern/löschen. Man entfernt einfach den link.

      Etwas besser verstanden oder hab ich vorbeierklärt? 

      Gruß
      Jukkales

  • Pingback: 7 Jahre nodch.de – Riesen Gewinnspiel | Becks Blog

  • Pingback: Vergesst Apache und installiert Nginx!

  • Pingback: » Blog Performance und Änderungen crusher.li

Schreibe einen Kommentar