NGINX Reverse Proxy für das Upstream Django / Gunicorn Backend

8

Ich habe das auf der nginx-Mailing-Liste gepostet, aber ich habe noch nie von jemandem gehört, also dachte ich, ich würde es hier auf Stackoverflow krachen lassen:)

Ich habe derzeit eine Django App auf Amazon EC2 gehostet. Alle meine Daten werden über Gunicorn an Port 8000 (ein Python WSGI HTTP Server für UNIX) bereitgestellt. Es ist ein Pre-Fork-Worker-Modell, das aus Rubys Unicorn-Projekt portiert wurde. Ich muss mir keine Sorgen machen, dass ich statische Inhalte (Bilder) an den Client weitergeben kann, weil all das von Amazon S3-Service für mich erledigt wird. Django übergibt die URL des Inhalts durch Gunicorn über json an den Client. Der Client kann es dann herunterladen.

Meine Django-App wird auf einer t1.micro-Instanz gehostet. Hier sind die Spezifikationen von Amazon Web Services:

Prozessor: Bis zu 2 EC2 Recheneinheiten (für kurze periodische Bursts). Virtuelle Kerne: 1 Speicher: 615 MiB Plattform: 32-Bit und 64-Bit

Ich habe 3 Gunicorn-Arbeiter, die auf dieser Instanz neben meiner Django-App laufen.

Für meinen Nginx Reverse-Proxy-Server verwende ich auch eine t1.micro-Instanz. Ich habe es eingerichtet und alles funktioniert einwandfrei. Hier ist meine etc / nginx / sites-enabled / default-Konfiguration wie folgt:

%Vor%

Dieses Setup ist großartig, aber es berücksichtigt keine Proxy-Pufferung für langsame Clients. Es berücksichtigt auch nicht das Caching und es berücksichtigt nicht die Anzahl der Nginx-Arbeiter, die ich benötige. Wie kann ich die Komprimierung konfigurieren? Ich habe Ressourcen gefunden, die angeben, dass da etwas namens gzip ist, unterstützt das JSON? Wie kann ich meine nginx-Konfiguration gemäß meinen t1.micro-Instanzspezifikationen optimieren?

Wenn Sie in meinem Szenario sind, welche Einstellungen würden Sie verwenden? Ihre Antworten und Beispiele werden sehr geschätzt. Danke :)

    
noahandthewhale 07.06.2013, 19:04
quelle

1 Antwort

5

Proxy-Pufferung

Im Allgemeinen wird die Proxy-Pufferung Ihnen nur helfen, wenn Sie sehr große Webseiten erstellen oder große Dateien senden. Unabhängig davon ist es ziemlich einfach einzurichten, aber Sie müssen die Puffergrößen auf etwa die Größe Ihrer größten Seiten + 20% einstellen (jede Seite, die nicht in den Puffer passt, wird auf die Festplatte geschrieben) oder die Proxy-Pufferung aktivieren deine größten Seiten.

docs: Ссылка

Caching

Ich weiß nicht viel über Ihre App und wie dynamisch ihr Inhalt ist, aber das Einrichten der richtigen Cache Control / ETAG-Headergenerierung in Ihrer App wird das erste sein, was Sie sich ansehen wollen. Dies wird Nginx darüber informieren, was für eine Proxy-Sicherheit sicher ist. Sie können auch mehrere Cache-Zonen einrichten, um den Speicherplatz zu verwalten, den Ihre Caches auf der Festplatte belegen.

%Vor%

Sie wollen Regeln, mit denen Sie den Cache umgehen können (zum Debuggen oder programmatisch)

%Vor%

Sie möchten auch, dass Ihre App bedingungslos aus dem Cache bereitgestellt wird, wenn Ihre Anwendung Fehler auslöst:

%Vor%

Dokumente:

Gzip

Das Aktivieren von gzip auf Ihrer Website ist immer ein Kompromiss zwischen CPU-Zeit und Bandbreite. Natürlich können Sie die Anzahl der über die Leitung gesendeten Daten verringern, wenn Sie Ihre Inhalte gzipen. Wenn Sie jedoch mit einem T1 Micro arbeiten, wird Ihre Kapazität für Proxy-Anfragen aufgrund der CPU-Auslastung stark eingeschränkt. Im Allgemeinen ist gzip eine viel bessere Idee für statischen Inhalt, den Sie vor-zippen und dann immer und immer wieder bedienen können.

(Ja, gzip unterstützt JSON, aber das liegt daran, dass gzip das Drahtformat wird und vom Client transparent entpackt wird. Sie sollten auf Content-Encoding: gzip nachlesen)

docs: Ссылка

Verschiedenes

Sie sollten auch ein paar verschiedene Einstellungen vornehmen:

%Vor%     
Thomas 08.06.2013, 04:01
quelle

Tags und Links