gninx & hiphop/+php/+mysql - Informationen

  • Thread starter Thread starter counteam
  • Start date Start date


C

counteam

Guest
Hallo.
Ich suche einige Informationen, vielleicht kann mir ja jemand weiterhelfen.

Ich arbeite derzeit mit einem Debian Lenny (5.0) System mit Apach2, PHP 5.3 & Co.

Da meine Seite des öfteren durch DDoS-Attacken down geht, habe ich mich etwas herumgegoogelt und stieß auf dem gninx-Webserver.
Da ich bereits davon schon gehört habe und generell in Linux fit bin, sollte eine Installation nichts im wege stehen.

Ich habe (bevor ich aber nun mich entscheide, das System neu aufzusetzen) aber noch einige Fragen und benötige informationen.

1. Ist gninx wirklich besser und performanter als Apache?
2. Kann gninx wirklich besser mit attacken umgehen, was für methoden gibt es hier?
3. Funktioniert HipHop-PHP auch mit dem gninx-Server?
4. HipHop-PHP Habe ich noch nie eingesezt gehabt, soll performance aufgrund des Compilierten PHP-Codes geben. Gibts bereits jemand, der damit erfahrung gemacht hat?

Wie genau funktioniert es mit HipHop-PHP?
Laut informationen programmiert man seinen Code, compiliert diesen und stellt den Webserver auf diese Compilierung ein(?)
Soviel wie ich auf englisch gelesen habe, bringt Hiphop einen Webserver mit, sprich, der compilierte code hat einen Webserver - Apache2 bzw. gninx muss dementsprechend nur als Proxy fungieren, richtig?

Kann neben den normalen PHP-Code auch Hiphop verwendet werden?
Rein Logisch gesehen, würde ich ja sagen, was ich aber nicht weiß.
Das Hiphop-Projekt bietet ja einen eigenen Webserver. Ein Virtualhost würde dann (sagen wir mal test.example.com) als Proxy fungieren und dementsprechend den hiphop-webserver ansprechen/weiterleiten. Wären dann ein Standartmäßiges arbeiten unter www.example.com (ohne Hiphop) möglich?

Ich danke euch für Informationen.
 
1. Ist gninx wirklich besser und performanter als Apache?
2. Kann gninx wirklich besser mit attacken umgehen, was für methoden gibt es hier?
3. Funktioniert HipHop-PHP auch mit dem gninx-Server?
4. HipHop-PHP Habe ich noch nie eingesezt gehabt, soll performance aufgrund des Compilierten PHP-Codes geben. Gibts bereits jemand, der damit erfahrung gemacht hat?
zu 1. Meiner Meinung nach ja, aber pauschal lässt sich das wohl nicht beantworten.

zu 2. Was heisst "besser"? nginx hat eine andere Architektur die weniger Ressourcen verbraucht und ggf. schneller ist. Aber es ist immer eine Frage der Konfiguration. nginx kann man auch langsam machen :)

zu 3. Ja.

zu 4. Bevor du dir Gedanken zu HipHop machst, solltest du den Flaschenhals deines Servers identifizieren. Den Haupt-Performancegewinn erzielt HipHop durch niedrigere CPU-Last. Wenn du aber Mangel an RAM hast, wird dir das nicht viel bringen.
 
1. Ist gninx wirklich besser und performanter als Apache?

Das ist pauschal nicht zu beantworten, weil es auf viele Faktoren ankommt. Ich habe gerade gestern für ein Projekt Benchmarks, unter Anderem mit verschiedenen Webservern, gemacht. Da hat sich die Performance von Apache in keinster Weise von nginx unterschieden, weil der Flaschenhals eben die Datenbank war.

Eine Aussage a la tausche Apache gegen nginx und alles ist schneller ist so nicht richtig. Du musst rausfinden, was warum langsam ist. Dann kannst du entsprechend reagieren. Manchmal gibt es Fälle, in denen ein Wechsel lohnt.
 
Wenn du es hier wirklich mit DDoS-Attacken zu tun hast, dann hilft dir da kein Wechsel des Webservers. nginx ist i.Vgl. zum Apachen weniger anfällig für div. Attacken, gegen echte DDoS-Attacken kann aber auch der nichts ausrichten. Da hilft nur mehr Bandbreite (100Mbit -> 1Gbit am Server, wenn das reicht) oder eine vorgeschaltete, dedizierte Hardwarefirewall. Das ist natürlich mit den entsprechenden Kosten verbunden.

Du solltest also erst einmal schauen, um was für eine Art von Attacke es sich konkret handelt. Darüber hinaus müsste man auch erst einmal wissen, um was für Hardware es sich in deinem Fall handelt und welche Software darauf läuft.

Noch eine paar Anmerkungen zu HipHop for PHP: das bietet dir auch nicht wirklich Schutz vor DDoS-Attacken, es hilft lediglich CPU-Last und RAM zu sparen. Durch das Übersetzen des PHP-Codes nach C++ kann dieser einfach ressourcenschonender auf aktuellen CPUs ausgeführt werden. Nachteil dabei ist, dass du damit quasi eine statische Binary hast, die du nach jeder Modifikation (in PHP) erst wieder neu erstellen musst. Für die Entwicklung gibt es zwar eine Art On-the-Fly-Umgebung (HPHPi), die ist aber nichts für den produktiven Einsatz. Sinn macht HipHop for PHP eigentlich nur bei entsprechender Useranzahl (hoch fünfstellig und aufwärts) um Hardware-Ressoucen zu sparen. I.d.R. ist aber nicht CPU-Last oder RAM die limitierende Größe, sondern meist die I/O-Performance des Systems (Read/Write der Platten), was sich z.B. bei Datenbankoperationen sehr stark bemerkbar macht.

Wenn du HipHop for PHP testen möchtest, dann kannst du dir das einfach via Github installieren. Das läuft z.B. ohne Probleme mit vB oder Wordpress, unterstützt aber bisher nur PHP 5.2. Dazu nimmst du dann noch einen Webserver (Apache, nginx etc.) als Reverse-Proxy. Davor solltest du aber vielleicht auch mal die div. Opcode-Cacher wie APC oder XCache testen, falls du das noch nicht gemacht haben solltest.

Abschließend noch ein paar Worte zu Apache vs. nginx. Wenn maximale Ressourcen zur Verfügung stehen, dann mag der Apache durchaus die bessere Performance liefern. Falls die Ressoucen aber beschränkt sind, dann ist meiner Erfahrung nginx oder auch lighttpd die bessere Alternative. Hinzu kommt, dass der Apache m.M. auch mehr Config-Know-How braucht, um ihn wirklich optimal einsetzen zu können.
 
In vielen Faellen ist man auf Apache angewiesen (zB Hosting-Umgebungen), will aber dessen Nachteile nicht alle mitschleppen.

Somit ist eine recht gute Alternative zum vollen Umstieg den Einsatz von nginx als Reverse-Proxy mit Buffering und Caching.
Durch den Einsatz von Request- und Response-Buffer wird die komplette Anfrage vom Client in Nginx gespeichert (was gegen Slowloris wirkt), ohne keep-alive an Apache geschickt welcher die Antwort an nginx weitergibt wo sie dann wieder gebuffert wird und dadurch der Apache-Thread vor Vollendung der Client-Kommunikation wieder frei wird, und dann von Nginx an den Client geschickt. (Was gegen andere Angriffsmethoden wirkt)
 
Gut ich denkemal ich kann gegen richtige DDoS Attacken nichts machen, liegt halt dementsprechend an der Bandbreite, richtig.

Aber generell habe ich gelesen dass ein "Flooden" der gninx besser damit umgehen kann (weils halt ebend eine andere Architektur ist), gut es kommt natürlich dementsprechend auf die Konfiguration an.

Ich habe gerade irgendetwas gelesen gehabt, dass der Apache komplizierter zu Konfigurieren ist,... Dies finde ich nicht. Ich arbeite bereits schon lange mit dem Apache, dementsprechend weiß ich auch wie dieser arbeitet und wie ich diesen ausgibig konfigurieren kann. gninx hingehen habe ich mir noch nie richtig angeschaut gehabt, deswegen frag ich.

Wegen Hiphop-PHP:
Natürlich möchte ich dies aufgrund der Performance-Steigerung einsetzen. Arbeitsspeicher, CPU und sonstiges Hardwaregedönsel steht mir on-mass zur verfügung.

Hat jemand schonmal mit hphp gearbeitet gehabt?

So wie ich gelesen habe, kompiliert man dementsprechend die PHP Dateien. Wie schaut es aus, kann man ein ganzen Ordner so compilieren dass man alles auf einmal zur verfügung hat? Oder muss man jede PHP einzeln kompilieren?

Meine Idee hierzu wäre dann ja, einen Ordner mit der "Source" anzulegen, wo immer änderungen gemacht werden (Der ordner wird beispielsweise via virtualhost intern verfügbar gemacht, sodass an der Source gearbeitet werden kann und wenn dann beispielsweise ein neues "Update" eingespielt werden soll, wird der ganze ordner compiliert und dieser ist dann online für alle nutzer bereitgestellt.

Oder gibts da was zu beachten?
Ich weiß, dass hphp hier einen eigenen "Server" bereitstellt, der auf einem Port gebunden wird (nach der compilierung), dieser wird dann nur noch über ein Webserver (Apache oder gninx) über ein "Proxy" angesprochen, richtig?

Gibts eventuell mittlerweile auch informationen im deutschsprachigem raum?
 
Natürlich möchte ich dies aufgrund der Performance-Steigerung einsetzen. Arbeitsspeicher, CPU und sonstiges Hardwaregedönsel steht mir on-mass zur verfügung.

Ich weiß natürlich nicht, um was für eine Anwendung es sich konkret handelt, aber eine große Performance-Steigerung wirst du damit kaum realisieren. hiphop-php hilft dir einfach dabei, PHP-Code durch die Umwandlung in C++ ressourcenschonender auszuführen. Einen Performancegewinn erzielst du also nur beim ausgeführten PHP-Code, aber z.B. nicht bei SQL-Queries, die bei vielen Anwendungen das entscheidende Performance-Faktum sind.

Hintergrundinfos zu hiphop-php findest du z.B. hier:
http://terrychay.com/article/hiphop-for-faster-php.shtml

Alles was du zum Testen und für die Installation brauchst, findest du hier:
https://github.com/facebook/hiphop-php/wiki/

Ich bin zwar nicht mehr auf dem aktuellsten Stand, aber hiphop-php unterstützt m.W. noch immer kein PHP 5.3, d.h. dass alle Anwendungen, die z.B. eval() verwenden, werden nicht funktionieren. Für Drupal oder auch andere Anwendungen gibt es aber bereits eigene "hiphop-php-Versionen".

Wenn du sagen würdest, um was für eine konkrete Anwendung es sich bei dir handelt, dann könnte man eventl. spezifischere Infos geben. Produktiv habe ich hiphop-php derzeit nirgends im Einsatz, ich hatte mir das vor Wochen aber intensiv angeschaut, da ich vorrangig mit Atom-Servern arbeite und dort das Thema Ressourcen durchaus eine Rolle spielt.
 
aber hiphop-php unterstützt m.W. noch immer kein PHP 5.3, d.h. dass alle Anwendungen, die z.B. eval() verwenden, werden nicht funktionieren
eval() ist ja auch sowas von PHP5.3 :D Das stammt bereits aus PHP4 wessen erste Version 2000, also vor 11 Jahren veroeffentlicht wurde.

Der Grund warum eval() und andere dynamische Code-Ausfuehrungen nicht unterstuetzt werden ist simpel; wie soll der Compiler im voraus daraus C++ Code machen wenn der Code erst zur Laufzeit generiert wird?
Ausserdem ist eval ein Zeugnis von (sehr) schlechtem Programmierstil; wenn es eingesetzt wird sollten sich noch viele andere Punkte finden an denen man besser die LEistungsschraube drehen kann als eine Sprach-Umwandlung...
(Wenn du nur 1(!) Beispiel findest wo eval absolut Pflicht ist und nicht zB durch ReflectClass umgangen werden kann ziehe ich meine Aussage zurueck. Ich konnte aber bislang keins finden)

Aber generell habe ich gelesen dass ein "Flooden" der gninx besser damit umgehen kann (weils halt ebend eine andere Architektur ist), gut es kommt natürlich dementsprechend auf die Konfiguration an.
nginx ist gegen Script-Kiddy Angriffe wie das sehr lahme Senden der Request-Header (Slowloris), langsames Auslesen der Antwort oder nicht-schliessen der TCP-Verbindung zwar nicht immun, kann aber aufgrund dass er single-threaded ist sehr gut damit umgehen.

Nginx als Reverse-Proxy mit konfiguriertem Response-Buffering kommt uebrigens aufs Gleiche raus ohne dass du auf Apache verzichten oder deine Systeme umkonfigurieren musst. Du musst nginx nur (korrekt konfiguriert) auf Port 85 (bsp) lauschen lassen, allen einkommenden Traffic von Port 80 auf 85 mittels iptables forwarden und in Apache mod_rpaf (konfiguriert) aktivieren.
Da die Apache-Threads direkt nach Abarbeitung wieder freigegeben werden und nicht erst nach Verbindungsbeendung kannst du die Auslastung sehr spuerbar druecken.

Bevor du mit sourcecode-Kompilierung anfaengst (erster Schritt waere APC oder ein anderer weniger intrusiver Bytecode-Cacher als direkt HipHop) solltest du wirklich an den anderen Schrauben wie Caching und Datenbank drehen.
 
Wegen Hiphop-PHP:
Natürlich möchte ich dies aufgrund der Performance-Steigerung einsetzen.
Ich möchte dich nicht deiner Illusionen berauben, aber du machst nicht Facebook. Die Jungs und Mädels von Facebook haben HipHop aus bestimmten Gründen entwickelt und nehmen die Nachteile, die durch eine Translation des PHP-Quelltexts nach C++ und der anschließenden statischen Kompilierung in Kauf, weil sie damit Schmerzen lindern können, die sie an anderer Stelle haben. Du wirst aller Wahrscheinlichkeit nach nicht von den gleichen Problemen geplagt.

Arbeitsspeicher, CPU und sonstiges Hardwaregedönsel steht mir on-mass zur verfügung.
Wieso dann überhaupt unnötig optimieren?

Das stammt bereits aus PHP4 wessen erste Version 2000, also vor 11 Jahren veroeffentlicht wurde.
Es wird dich sicherlich schockieren, aber eval() gab es auch schon in PHP 3.

Du musst nginx nur (korrekt konfiguriert) auf Port 85 (bsp) lauschen lassen, allen einkommenden Traffic von Port 80 auf 85 mittels iptables forwarden und in Apache mod_rpaf (konfiguriert) aktivieren.
Weshalb so kompliziert und nicht einfach direkt nginx an 80/tcp der externen Netzwerkschnittstelle binden und an den nachgeschalteten Webserver durchreichen?
 
Es wird dich sicherlich schockieren, aber eval() gab es auch schon in PHP 3.
Ich dachte mir auch eigentlich dass es schon aelter sei aber auf PHP.net ist es als (PHP4, PHP5) beschrieben.

Weshalb so kompliziert und nicht einfach direkt nginx an 80/tcp der externen Netzwerkschnittstelle binden und an den nachgeschalteten Webserver durchreichen?
Mein Ziel mit diesem Setup ist dass Apache (und jedgliches Panel) keinerlei Umaenderung benoetigt und mittels einer einzigen ipTables-Regel der reverse-Proxy beigeschaltet oder entfernt werden kann.
 
Ich dachte mir auch eigentlich dass es schon aelter sei aber auf PHP.net ist es als (PHP4, PHP5) beschrieben.
Aus dem ChangeLog von PHP-2.0:
Code:
May. 17 Version 1.99q
...
- Added Eval() function
Das war bereits 1996.
 
Last edited by a moderator:
Für unter DDoS stehende Webserver kann ich den Hiawatha Webserver empfehlen.

www.hiawatha-webserver.org

Dieser Webserver hat sich bei mir unter Synfloods, DDoS, DoS, Slowloris, CSRF, XSS und MYSQLi Attacken bewiesen.
Habe ich mir gestern schonmal testweise in windows angeschaut, sieht schon nicht schlecht aus, vielleicht teste ich dies mal in einer sandbox umgebung.

Wie bitteschön soll dieser Server beispielsweise gegen DDoS Attacken resistent sein? Derartige Attacken geschehen auf einer ganz anderen Ebene - Der Webserver hat also nicht viel damit am Hut, da es bereits viel früher, also auf der Netzwerkebene geschieht.

Die eval funktion gibts schon länger, richtig. Nur funktioniert diese im bezug auf Hiphop nicht, dies habe ich auch bereits gelesen, richtig. Aber wofür benötige ich es? nirgendswo für.

Ich betreibe eine Suchmaschine, selbst Programmiert mit Zahlreichen täglichen Besuchern.
 
Back
Top