Thu 1 Mar 2007
Этот пост о том, как запустить django с nginx (с блокировкой нежелательных ботов и с установленной базой GeoIP).
Инсталляции по каждому детально рассмотрены здесь: nginx, django, django+fcgi, flup.
Не зависимо от того, запускается ли django в threaded- или в fork-режиме, для соединения с сервером используется FastCGI, через сокет или через порт.
Вот эти четыре варианта скрипта для запуска, один из которых надо поместить в каталог вашего проекта:
* Threaded+socket
* Threaded+Port
* Fork+socket
* Fork+Port
Теперь создадим базовый конфигурационный файл для nginx. При конфигурировании перед инсталляцией я задал основным каталогом /usr/nginx.
Nginx позволяет подгружать конфигурацию из других файлов, чем я и воспользовался. Разделил на основной файл с общими настройками, файл с параметрами для FastCGI, файл с адресами базы GeoIP и файлы для каждого проекта/домена.
Для GeoIP модуля я использовал бесплатную версию с сайта maxmind.com и ip-to-country.webhosting.info, которые с помощью своей утилиты и из пакета nginx/contrib сконвертировал в приемлемый для веб-сервера вид, при этом изрядно переработав и дополнив.
Пример:
Переменная $geo может быть записана в логи, а также передается в приложение через параметры FastCGI. В django-проекте может быть вызвана как request.META['GEO']
Также в основной конфиг я включил ограничение на скорость скачивания для разных ненужных поисковых ботов и блокирование некоторых спамеров, туда легко что-то свое добавить или убрать.
Здесь все конфигурационные файлы:
Инсталляции по каждому детально рассмотрены здесь: nginx, django, django+fcgi, flup.
Не зависимо от того, запускается ли django в threaded- или в fork-режиме, для соединения с сервером используется FastCGI, через сокет или через порт.
Вот эти четыре варианта скрипта для запуска, один из которых надо поместить в каталог вашего проекта:
* Threaded+socket
* Threaded+Port
* Fork+socket
* Fork+Port
Теперь создадим базовый конфигурационный файл для nginx. При конфигурировании перед инсталляцией я задал основным каталогом /usr/nginx.
Nginx позволяет подгружать конфигурацию из других файлов, чем я и воспользовался. Разделил на основной файл с общими настройками, файл с параметрами для FastCGI, файл с адресами базы GeoIP и файлы для каждого проекта/домена.
Для GeoIP модуля я использовал бесплатную версию с сайта maxmind.com и ip-to-country.webhosting.info, которые с помощью своей утилиты и из пакета nginx/contrib сконвертировал в приемлемый для веб-сервера вид, при этом изрядно переработав и дополнив.
Пример:
2.6.190.56/29 GB; 3.0.0.0/8 US; 4.0.0.0/12 US;Скачать уже готовую базу по странам можно у меня (gzip 0.6MB).
Переменная $geo может быть записана в логи, а также передается в приложение через параметры FastCGI. В django-проекте может быть вызвана как request.META['GEO']
Также в основной конфиг я включил ограничение на скорость скачивания для разных ненужных поисковых ботов и блокирование некоторых спамеров, туда легко что-то свое добавить или убрать.
Здесь все конфигурационные файлы:
nginx.conf django.conf fastcgi.conf bots.conf geoip.conf (gzip 0.6MB)Детальная информация о django здесь и здесь. О nginx: здесь и здесь.
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 ;)