2010-04-16 13 views
6

Ich plane, alle meine statische Inhalte an einen CDN zu bewegen, so auf meinem Server nur ich dynamische Inhalte links. Ich habe jetzt Nginx als Reverse-Proxy für Apache eingerichtet. Die statische Anforderung, die direkt von Nginx geliefert wurde, ohne dass Apache gestartet werden musste. NginxWird ein Nginx als Reverse-Proxy für Apache-Hilfe auf dynamische Inhalte nur

In diesem Fall behandelt einen großen Teil des Antrags und ich kann die Notwendigkeit von Nginx deutlich sehen.

Nun, da ich all den statischen Inhalt in einer anderen Domäne bewegte, gibt es immer noch einen Bedarf nginx vor Apache zu haben. Denn jetzt sind alle Anfragen standardmäßig dynamische Anfragen und alle gehen zu Apache.

Gibt es noch andere Vorteile von Nginx und Apache für nur dynamische Inhalte ausgeführt haben.

Mein dynamischen Inhalt ist PHP/MySQL

Edit:

Um klar zu sein: Ich habe jetzt Nginx als Reverse Proxy. Es liefert statische und dynamische Inhalte. Aber ich meine statischen Dateien in ein CDN zu bewegen. Brauche ich dann noch Nginx auf meiner Domain.

+0

Wie ist das mit AppEngine? –

+0

Mit "dynamischem Inhalt" meinen Sie unterschiedliche Inhalte pro Benutzer oder nur Inhalte, die über PHP generiert werden? Wenn dieselbe Seite für mehrere Benutzer verwendet wird, könnte Nginx sie für ein paar Sekunden zwischenspeichern, was bei starker Auslastung sehr hilfreich ist. –

+0

Nein die Seiten sind immer unterschiedlich. Keine Notwendigkeit für Nginx, denke ich. –

Antwort

2

Nein, Sie brauchen nginx nicht mehr.

+0

Können Sie mir eine Erklärung geben, warum das nicht mehr benötigt wird? Hilft es Apache in keiner Weise mehr? –

+2

Ich bin etwas verwirrt bei Ihrer Frage an erster Stelle.Sie haben nginx nur zum Bereitstellen statischer Inhalte hinzugefügt. Sie liefern keinen statischen Inhalt mehr, aber Sie fragen sich, ob Sie noch nginx benötigen? Es dient jetzt keinem Zweck mehr, nur zusätzliche Kosten. – goat

+1

Ich dachte, vielleicht hat es auch für dynamischen Inhalt geholfen. –

0

nginx vor ist die beste Lösung für den Fall, verwenden Sie Apache 1.3:

nginx kann leicht Tausende von conections dienen, aber Apache kann nicht

+0

Kannst du ein wenig darüber erzählen, was du meinst? Weil ich nur dynamische Inhalte über Apache liefere. Und ich benutze Apache 2 –

3

Was ich getan habe, für eine Website ist:

  • gesetzt nginx als Reverse Proxy vor Apache
  • configure es so hoch:
    • Anfragen an PHP Seiten (d.h. dynamische Inhalte) sind
    • Anträge auf statische Dateien (CSS, JS, ...) werden von nginx direkt bedient Apache gesendet.

Dies ohne zwei Domänen einrichten müssen: alle auf der gleichen Domain.


Im Grunde, was ich getan habe, ist:

  • dienen Bilder von nginx, ohne gzip-Kompression, mit Caching
  • dienen js/css (Textdateien) von nginx, mit gzip-Komprimierung , mit Caching
  • dienen einige andere Erweiterungen (pdf, executables, ...) Form nginx, ohne Komprimierung, ohne Caching
  • die anderen Anfragen an Apache übergeben


Hier ist, wie Datei meine nginx Konfiguration wie folgt aussieht:

server { 
    listen 80; 
    server_name MY_DOMAIN_NAME; 

    access_log /var/log/nginx/MY_DOMAIN_NAME.access.log; 

    gzip on; 
    gzip_comp_level 2; 
    gzip_proxied any; 
    gzip_types text/plain text/html text/css text/xml application/xml application/xml+rss application/xml+atom text/javascript application/x-javascript application/javascript; 

    location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     gzip off; 
     expires 1d; 
    } 
    location ~* ^.+\.(css|js)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     #access_log off; 
     expires 1d; 
    } 
    location ~* ^.+\.(pdf|gz|bz2|exe|rar|zip|7z)$ { 
     root /home/www/MY_DOMAIN_NAME; 
     gzip off; 
    } 


    location/{ 
     proxy_pass http://MY_DOMAIN_NAME:8080; 
     proxy_redirect  off; 

     proxy_set_header Host    \$host; 
     proxy_set_header X-Real-IP  \$remote_addr; 
     proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; 
     proxy_max_temp_file_size 0; 

     client_max_body_size  10m; 
     client_body_buffer_size 128k; 

     proxy_connect_timeout  90; 
     proxy_send_timeout   90; 
     proxy_read_timeout   90; 

     proxy_buffer_size   4k; 
     proxy_buffers    4 32k; 
     proxy_busy_buffers_size 64k; 
     proxy_temp_file_write_size 64k; 
    } 
} 


Nun, warum ein solches Ding ?

Nun, nginx soll:

  • benötigen weniger Speicher
  • schneller sein
  • Lage sein,

So mehr Verbindungen zu handhaben, ich nehme auf einer Website helfen könnte mit ein wenig Verkehr, um die Last, die auf Apache gelegt wird, zu senken.

+0

Ok vielleicht war meine Frage nicht so klar. Aber das ist das Setup, das ich jetzt habe. Es wird in meinem ersten Absatz erklärt. Aber jetzt verschiebe ich meine statischen Dateien in eine andere Domäne. Auf diese Weise fallen die Ressourcen, die ich verwende, noch mehr. Aber was ich wissen wollte ist, ob ich dann noch Nginx brauche. –

2

Sie können auch nginx verwenden, um die SSL-Verarbeitung von den Apache-Instanzen zu entfernen.

Zum Beispiel haben wir einen Stapel mit nginx-> haproxy-> Pool von Apache-Servern konfiguriert. nginx und haproxy leben zusammen auf einem Herzschlag-Cluster und füttern Anfragen in einen Pool von Apache-Boxen auf dem Backend. Wir installieren alle SSL-Zertifikate auf dem nginx-Frontend.

14

Ja, Sie brauchen unbedingt nginx vor Apache. Apache verwendet 1 Thread oder Prozess pro Verbindung. Jeder dieser Threads belegt Speicher. Wenn Sie einige hundert Besucher auf Ihrer Website haben und Keepalive aktiviert ist, speichert jeder dieser Browser einen Apache-Prozess oder Thread, der belegt, dass er Speicher auf Ihrem Server belegt.

Sie können dies umgehen, indem Sie keepalive auf Ihrem Apache-Server deaktivieren, dies verlangsamt jedoch die Leistung Ihrer Website, da Browser Verbindungen nicht wiederverwenden können.

Stattdessen verwenden Sie stattdessen Nginx als Reverse-Proxy mit Keepalive aktiviert. Es kann Tausende von Verbindungen mit einem minimalen Speicherbedarf (ca. 8 MB) aufrechterhalten. Da nginx lokal für Ihren Apache-Server ist, belegt jede Anfrage nur ein Apache-Kind oder -Thread für einige Mikrosekunden. Das bedeutet, dass Sie Tausenden von Menschen mit nur einer Handvoll Apache-Prozessen dienen können.

Auch die Konfiguration von nginx ist viel flexibler als die von Apache, und da sie auf der Vorderseite ist, gibt sie Ihnen viel Flexibilität.

+1

Dies ist eindeutig die beste Antwort aus einer technischen Perspektive. Sie möchten nicht, dass Apache Ihre Verbindungen mit Keep-Alives behandelt. Sicher, Sie können keep-alives deaktivieren, dann werden sich alle Ihre Benutzer darüber beschweren, dass Ihre Website langsam ist (besonders weit entfernte Benutzer). – diq

+0

Sehr gute Antwort, aber vergessen wir nicht alle anderen Leckereien, die Nginx machen kann. Eine sehr relevante Frage wäre Caching. Das Caching von dynamischem Inhalt würde (soweit möglich) weiter Sinn machen. Also ja, Nginx würde helfen ... viel. –

Verwandte Themen