1. #1
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 592 Times in 319 Posts

    Standard Viele Seitenaufrufe, ServerLoad minimieren

    Ich bin's schon wieder

    Aktuell habe ich ein kleines Problem was den ServerLoad bei vielen Seitenaufrufen betrifft. Ich habe mir ein kleines Tool geschrieben, um das Ganze mal zu testen.

    Fazit: 1500 Aufrufe innerhalb weniger Sekunden = ServerLoad >50. Ich habe dann bei einem Load von 70 abgebrochen.

    Das Tool funktioniert so: Ich ziehe mir eine Liste von Proxys und rufe mit diesen Proxys dann die URL auf, funktioniert der Proxy, wird die Seite so lange mit diesem Proxy aufgerufen, bis der Proxy nicht mehr funktioniert. Währenddessen werden weitere Proxys geladen usw. Es sind also viele Seitenaufrufe von vielen verschiedenen IPs.

    Wie blockiere ich am besten Verbindungen von IPs, die so oft eine Seite in so kurzer Zeit aufrufen?
    Wie minimiere ich den ServerLoad während einem solchen 'Angriff'?

    Danke

  2. #2
    Avatar von Devon
    Registriert seit
    18.11.2011
    Beiträge
    2.189
    Thanked 1.576 Times in 1.025 Posts

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    Stichwort: iptables, damit kannst du Regeln entwerfen, die die IP-Adressen filtern und dementsprechend behandeln (blockieren/zulassen). Weitere Infos:

    Schutz bei (D)DOS Angriffen mit Iptables - Administrator's Blog
    DDOS Deflate Script – Prevent Attacks using Iptables or SPF » Jack Huang
    http://u-hacks.net/server-administra...griffen-15005/

    Grüße
    Geändert von Devon (05.07.2013 um 18:29 Uhr)

  3. #3
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    8.018
    Thanked 9.387 Times in 3.225 Posts
    Blog Entries
    5

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    Jo weil dein Server ungeschützt und/oder vollkommen fehlkonfiguriert ist. Hat man bei CN gesehen: Paar Sekunden F5 gedrückt gehalten und der Load war so hoch, dass mybb dicht gemacht hat.

    Zitat Zitat von Snees Beitrag anzeigen
    Wie blockiere ich am besten Verbindungen von IPs, die so oft eine Seite in so kurzer Zeit aufrufen?
    Firewall, zb iptables. Manche Webserver (zb nginx) können dazu auch Regeln erstellen, dass ab einer gewissen Anzahl an Anfragen in einer bestimmten Zeit nur noch ein 400er ausgeliefert wird. Primär sollte das aber die Firewall machen, ein Webserver ist eigentlich nicht dazu da so was abzuwehren. Funktioniert natürlich auch nur, so lange die Anbindung das mitmacht.

    Zitat Zitat von Snees Beitrag anzeigen
    Wie minimiere ich den ServerLoad während einem solchen 'Angriff'?
    Am besten, in dem die betreffende Clients blockiert werden, bevor sie groß Ressourcen in Anspruch nehmen. Ansonsten kann caching das ganze auch reduzieren.


  4. The Following User Says Thank You to DMW007 For This Useful Post:

    Snees (05.07.2013)

  5. #4
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 592 Times in 319 Posts

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    Jo weil dein Server ungeschützt und/oder vollkommen fehlkonfiguriert ist.
    Deswegen bin ich ja hier, habe noch nicht so die Ahnung was das angeht. Mit iptables beschäftige ich mich gerade, ist meiner Meinung nach keine Sache von zwei Minuten.

    Paar Sekunden F5 gedrückt gehalten und der Load war so hoch
    Das geht jetzt schon mal nicht mehr, habe ich im Griff - wenigstens das -

    Primär sollte das aber die Firewall machen, ein Webserver ist eigentlich nicht dazu da so was abzuwehren
    Sehe ich auch so, wie gesagt, versuche jetzt das Beste aus den iptables herauszuholen und werde zwischendurch immer wieder testen, auch mit ab (ApacheBench).

    Habt ihr weitere Tipps?

  6. #5
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    cachen
    Am besten du lässt mal jemanden drüber gucken, hat bestimmt jemand zeit.
    Geändert von Ta1lor (05.07.2013 um 20:30 Uhr)

  7. #6
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 592 Times in 319 Posts

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    cachen
    Im Moment benutze ich php5-xcache, macht es Sinn auch noch php5-memcache zu installieren? RAM habe ich eigentlich genug.

    Welche Möglichkeiten gibt es noch?

  8. #7
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    Zitat Zitat von Snees Beitrag anzeigen
    Im Moment benutze ich php5-xcache, macht es Sinn auch noch php5-memcache zu installieren? RAM habe ich eigentlich genug.

    Welche Möglichkeiten gibt es noch?
    Es geht darum den statischen Content zu cachen, bzw. für z.B. Gäste auch den dynamischen.

  9. #8
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    8.018
    Thanked 9.387 Times in 3.225 Posts
    Blog Entries
    5

    Standard AW: Viele Seitenaufrufe, ServerLoad minimieren

    Ist zwar schon etwas älter, aber: Nein macht es nicht. Sollte man auch selbst feststellen, wenn man sich mal die PHP-Apis von beiden anschaut. Memcache ist skalierbarer, da du einen Cluster von Memcache-Servern betreiben kannst. Das macht aber logischerweise nur bei größeren Projekten Sinn, wo dementsprechend mit mehreren Servern davon profitiert werden kann. Sofern alles auf einem Server liegt, hast du eher Overhead durch die TCP-Verbindungen. Daher macht hier xCache mehr Sinn. Zumal mit Memcache nur Daten in den RAM legen kann. xCache legt auch compilierte PHP-Dateien in den RAM, sofern das möglich ist (also keine Nutzung dynamischer Werte wie zb time() oder so was). Dir sollte aber klar sein, dass beide in der jeweiligen PHP-Anwendung integriert werden müssen. Ist diese nicht dafür ausgelegt, bringt xCache nur teilweise etwas und Memcache gar nichts. Der wesentliche Sinn liegt ja darin, den Datenbankserver zu entlasten, in dem die Ergebnisse im RAM zwischengecached werden. Sprich überall wo es Sinn macht müsste von der Logik her so was eingebaut werden:

    Code:
    function getHeader() {
        $key = 'headerTemplate';
        if(!cache::isset($key)) {
            $headerTemplate = $db->query('SELECT ...');
            cache::set($key, $headerTemplate);
            return $headerTemplate;
        }
        return cache::get($key);
    }
    Je nachdem welche Inhalte das sind muss eine sinnvolle TTL festgelegt werden, bzw. den Cache Eventbasierend leeren, wenn sich was ändert. Letzteres ist meist am sinnvollsten, weil dann die Daten durch das Caching nicht veraltet sind. Ist aber auch aufwändiger, weil der Cache an allen Punkten wo sich die Daten ändern können gepurged werden muss. In dem Beispiel etwa im AdminCP wenn das Template des Headers verändert wird. Bevor irgendwas gecached wird muss man sich vor allem vergewissern, was man da eigentlich cached. Ein gerendertes Templates zu cachen wo zb abhängig vom eingeloggten User bestimmte Dinge angezeigt werden ist nicht sinnvoll. Um so etwas zu vermeiden, kann man zb mit dynamischen Keys arbeiten. Natürlich sollte auch darauf geachtet werden, primär möglichst häufig verwendete Datensätze zu cachen.

    Am performantesten sind reverse Proxys wie varnish (https://www.varnish-cache.org/). Die setzt du auf Port 80, entsprechend konfiguriert holen sie sich die komplette Page vom Backend und laden sie in den RAM. Ab dem 2. Abruf liefert Varnish dann die Seite selbst aus dem Cache aus. Ist etwas aufwändiger einzurichten und muss je nach eingesetzter Software angepasst werden. Da die komplette HTML-Ausgabe gecached wird, geht die Anfrage also gar nicht mehr erst an PHP. Wenn das der Fall ist, ist das ganze also deutlich performanter als xcache oder memcache. Der Nachteil ist, dass eben die komplette Seite gecached wird. Je nach eingesetzter Software kann das ein Vor- oder Nachteil sein. Für einen Wordpress-Blog wo 99% der Requests von nicht eingeloggten Usern kommen wäre es zb ein Vorteil, da kann fast alles gecached werden. In vBulletin macht das nur für Gäste Sinn, da sonst userspezifische Daten wie Benachrichtigungen oder der Username des jeweiligen Users gecached werden würden.
    Ist ein komplexeres Thema, wo man sich nicht mal eben in 20min einarbeiten kann. Je nachdem was gehostet werden soll macht zudem das eine mehr Sinn als das andere, manchmal ist auch eine Kombination sinnvoll.


Ähnliche Themen

  1. Seitenaufrufe erhöhen - Wie?
    Von Dynamoking im Forum Webmaster
    Antworten: 8
    Letzter Beitrag: 13.09.2013, 11:13
  2. Neu: "Private Chats"-Fenster minimieren!
    Von Marc im Forum Knuddels-News
    Antworten: 8
    Letzter Beitrag: 30.10.2012, 06:10
  3. Seitenaufrufe einer Seite erhöhen
    Von !lkay im Forum Windows
    Antworten: 2
    Letzter Beitrag: 08.01.2012, 22:20
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.