Verhalten von Nginx als Proxy

Verhalten von Nginx als Proxy

Ich teste Nginx mit verschiedenen Konfigurationen, um eine Architektur zu ersetzen, die mit Squid + Apache arbeitet. Ich weiß, dass ich Nginx verwenden kann, um statische Anfragen und Lastausgleich zu verwalten, aber ich interessiere mich für eine bestimmte Lösung, die ich nicht ganz verstehe:

Ich verwende 2 Nginx-Server (ausgeglichen) mit der Einstellung „proxy_pass“, um alle Anfragen an einen Apache-Server weiterzuleiten. Wenn ein Client eine Anfrage an die Site stellt, verarbeitet einer der Nginx-Server sie und sendet sie an den Apache-Server. Wie könnte dieses Verhalten nun eine Verbesserung meines Systems darstellen? Es scheint, dass alle Anfragen über Apache laufen und ich sehe überhaupt keinen Vorteil. Was passiert, wenn 100 gleichzeitige Verbindungen über Nginx laufen? Werden die 100 Verbindungen an den Apache-Server weitergeleitet oder gibt es eine Art internes Verhalten, das einen kleinen Einfluss auf Apache zulässt?

Antwort1

Nginx kann Ihrem Apache helfen, wenn Sie viele langsame Verbindungen zu Ihren Websites haben. Beispielsweise ist die State-Machine-Architektur von Nginx nicht anfällig für Slowloris DDoShttp://isc.sans.org/diary.html?storyid=6601.

Antwort2

Ich weiß, dass nginx viele Funktionen ausführen kann, aber warum delegieren wir nicht jeden Teil der Architektur an eine Software, die einen Teil davon wirklich gut beherrscht? Erwägen Sie einige oder alle dieser Teile: Pound oder Haproxy für den Lastenausgleich, Varnish oder Squid für den Reverse-Caching-Proxy und Nginx und Apache auf dem Backend für statische bzw. dynamische Inhalte (jeweils).

Trotzdem bin ich mir nicht ganz sicher, was Ihre Frage ist. Sie haben nginx angewiesen, alle Anfragen (ich nehme an, mit „weitergeben“ meinen Sie, sie nicht zwischenzuspeichern) an ein Apache-Backend weiterzuleiten. Ohne Zwischenspeichern würde der Vorteil darin bestehen, die Last auf mehrere Apache-Server im Backend zu verteilen. Wenn Sie nur einen Backend-Apache-Server haben, profitieren Sie nur davon, wenn Sie den Inhalt zwischenspeichern und nicht nur Anfragen direkt weiterleiten.

Weitere Einzelheiten zu Ihrem Setup und Ihren Wünschen wären hilfreich.

Antwort3

Einverstanden – lassen Sie nginx statische Inhalte direkt bereitstellen, und Apache muss sich nur um den PHP-Kram kümmern – das bedeutet viel weniger Apache-Worker und damit letztlich eine viel bessere Leistung.

  Standort / {
    Proxy-Passwort http://backendwww;
  }
  Standort ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ {
    Zugriff_Abmeldung;
    läuft in 30 Tagen ab;
    Stamm /var/www/Anwendung_Webroot;
    Fehlerseite 404 = @fallback;
  }
  Standort @fallback {
    Proxy-Passwort http://backendwww;
  }
  Standort ~ /\.ht {
    alles leugnen;
  }

Antwort4

Stimme mit Zero* überein, lass enginx alle statischen Daten handhaben, eine einfachere Konfiguration besteht jedoch darin, einfach PHP an das Backend zu übergeben, anstatt anzugeben, was nicht an Apache/PHP übergeben werden soll, z. B.:

location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }

verwandte Informationen