Thu 1 Mar 2007
Das Starten django mit nginx
Posted by Alrond | Tags: Django : FastCGI : framework : GeoIP : nginx :
Im diesem Post gehts darum, wie man django mit nginx starten kann (mit der Blockierung der unerwünschten bots und mit der eingerichteten GeoIP-Datenbank).
Die Installationen nach jedem sind ausführlich hier betrachtet: nginx, nginx(eng), django, django+fcgi, flup.
Unabhängig davon, ob django in threaded- oder in fork-Modus gestartet wird, wird FastCGI für die Verbindung mit dem Server durch Socket oder Port verwendet.
Da sind die vier Skriptvarianten für das Starten, einen von denen muss in den Katalog Ihres Projektes unterbracht werden:
* Threaded+socket
* Threaded+Port
* Fork+socket
* Fork+Port
Nun schaffen wir die Hauptkonfigurationsdatei für nginx. Bei der Konfiguration vor der Installation habe ich als Hauptkatalog /usr/nginx festgelegt.
Nginx lässt die Konfiguration aus anderen Dateien einschliessen, das ich auch genutzt habe. Aufgeteilt in die Hauptdatei mit allgemeinen Einstellungen, in die Datei mit den Parametern für FastCGI, die Datei mit den Adressen GeoIP und die Dateien für jedes Projekt.
Für GeoIP-Modul habe ich die kostenlose Version von der Webseite maxmind.com und ip-to-country.webhosting.info verwendet, die mit Hilfe des meinen Tools aund aus dem Paket nginx/contrib in akzeptabeles für den Web-Server Ausehen konvertiert habe.
Beispiel:
Ich habe auch in haupt-config die Geschwindigkeitbeschränkung des Downloads für verschiedene unnütze Suchbots und die Blockierung der einigen spammers eingeschlossen, es ist unkompliziert dahin etwas zu ergänzen oder zu entfernen.
Hier sind alle Konfigdateien:
Die Installationen nach jedem sind ausführlich hier betrachtet: nginx, nginx(eng), django, django+fcgi, flup.
Unabhängig davon, ob django in threaded- oder in fork-Modus gestartet wird, wird FastCGI für die Verbindung mit dem Server durch Socket oder Port verwendet.
Da sind die vier Skriptvarianten für das Starten, einen von denen muss in den Katalog Ihres Projektes unterbracht werden:
* Threaded+socket
* Threaded+Port
* Fork+socket
* Fork+Port
Nun schaffen wir die Hauptkonfigurationsdatei für nginx. Bei der Konfiguration vor der Installation habe ich als Hauptkatalog /usr/nginx festgelegt.
Nginx lässt die Konfiguration aus anderen Dateien einschliessen, das ich auch genutzt habe. Aufgeteilt in die Hauptdatei mit allgemeinen Einstellungen, in die Datei mit den Parametern für FastCGI, die Datei mit den Adressen GeoIP und die Dateien für jedes Projekt.
Für GeoIP-Modul habe ich die kostenlose Version von der Webseite maxmind.com und ip-to-country.webhosting.info verwendet, die mit Hilfe des meinen Tools aund aus dem Paket nginx/contrib in akzeptabeles für den Web-Server Ausehen konvertiert habe.
Beispiel:
2.6.190.56/29 GB; 3.0.0.0/8 US; 4.0.0.0/12 US;Die schon fertige GeoIP-Base für die Länder ist by mir zu download. Variabel $geo kann in die logs aufgezeichnet sein, sowie wird in die Anwendung durch die Parameter FastCGI übergeben, in Django-Projekten ist sie durch request.META['GEO'] zu bekommen.
Ich habe auch in haupt-config die Geschwindigkeitbeschränkung des Downloads für verschiedene unnütze Suchbots und die Blockierung der einigen spammers eingeschlossen, es ist unkompliziert dahin etwas zu ergänzen oder zu entfernen.
Hier sind alle Konfigdateien:
nginx.conf django.conf fastcgi.conf bots.conf geoip.conf (gzip 0.6MB)Die ausführlichen Informationen über django sind hier und hier. Über nginx: hier und hier.
English
Deutsch
(12 votes, average: 4.7 out of 5)
March 3rd, 2007 at 6:15 p.m.
Ich kenne nicht viele Deutsche, die in Django programmieren. Es ist wahrscheinlich bei uns seiner Zeit voraus :-) Schwer sich nach Ewigkeit mit PHP zusammen umzustellen, auch einsehend dass es die Vergangenheit ist.
Nach Ihrem vorigen Bericht sehe ich mich auch Nginx an. Es ist genauso schnell wie lighttpd, nach Bequemlichkeit finde ich es noch besser. Und was ist mit RAM-Verbrauch?
March 5th, 2007 at 12:26 a.m.
GeoIP hat 165.800 Adressen (3.4MB) (die über 1.000 zweifelhaften davon habe ich manuell geprüft :-))
Nginx hat ein Hauptprozess und 3 "worker_processes"
Bei mir Speicherverbrauch:
mit GeoIP = je Prozess 10MB
ohne GeoIP = je Prozess 1.5MB
March 6th, 2007 at 6:13 p.m.
I needed
fastcgi_param PATH_INFO $fastcgi_script_name;
to make it work.
Thanks!
March 6th, 2007 at 9:28 p.m.
This parameter is in "fastcgi.conf"
In your "django.conf" you have:
include conf/fastcgi.conf;
Doesn't it work?
March 7th, 2007 at 2:26 a.m.
The file is correct. I didn't copy the first 4 lines of the file. Why the hell, no clue. :)
Greetings
March 8th, 2007 at 12:33 a.m.
2 Kai: write exactly on my e-mail alrond (@) alrond . com
I can also speak german ;)