Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: nginx+Django FastCGI, реакция на отв ет 302 (редирект)
- To: nginx-ru@xxxxxxxxx
- Subject: Re: nginx+Django FastCGI, реакция на отв ет 302 (редирект)
- From: Sergey Shepelev <temotor@xxxxxxxxx>
- Date: Thu, 21 May 2009 11:21:26 +0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=hbt0s+WdZUckb3WgmVjpnMeh7VFJwwCS9lDTI4cRg7k=; b=FXs92gquJdfTiH6iyWXGVVD1qSk5OKNiAV5fB+R3em1PSf5Pv1e50uyJLUg6nwAZsK iUvoQZpGjVIKVa1Ptg06k6WEmeg8GfNcKUzPe9kGj2OT/AHtvsveEjjDyKkqvbrdzLGi 7nl2d6duTUiwf7JeC5a2aEWzuwRwkEIo1Yvmk=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=f9x87a/6MeArstszqZlTQa6beaTtwtO3xqXscaaLUYO5394YKeFzW1Zyi2Dcmnu6f8 /i1uehkBjs6Az4qP6BmBjBjoppK/fbo62UjeyvK8pFCrh+eOk96iQJX06uLkipGOeoBz ESaW7zeU5r6XJrqwerzfHlLCo1gUSs3LPdZ4g=
- In-reply-to: <1c0b9d250905201712m593e663frc7953bf5f8abf848@xxxxxxxxxxxxxx>
- References: <1c0b9d250905201712m593e663frc7953bf5f8abf848@xxxxxxxxxxxxxx>
Очень советую spawning. Это WSGI-HTTP сервер. Не надо заморачиваться с
FastCGI. Все прелести proxy_pass, в том числе новое модное кеширование
работает.
У меня работает на живых серверах прекрасно.
#!/bin/bash
: ${HOST=127.0.0.1}
: ${PORT=8099}
: ${PROCESSES=$(grep -cs processor /proc/cpuinfo || echo 1)}
: ${THREADS=16}
: ${SETTINGS_MODULE=page_builder.settings}
OPTS="--host=$HOST --port=$PORT --processes=$PROCESSES --threads=$THREADS --factory=spawning.django_factory.config_factory $SETTINGS_MODULE"
if [[ "$ACCESS_LOG_PATH" && "$ACCESS_LOG_PATH" != "-" ]]; then
OPTS+=" --access-log-file=$ACCESS_LOG_PATH "
fi
# >/dev/null redirect hides spawning debug messages
exec spawn $OPTS > /dev/null
Вот такой нехитрый скрипт запускает N=кол-во ядер процессов, в каждом
16 тредов. По процессу на ядро позволяет выжать 100% проца в случае
большой нагрузки.
Тот же скрипт в цвете http://paste.pocoo.org/show/118314/
Еще у spawning есть фича, если приложение не блокируется (то есть не
лезет в сеть, базу и на диск, а просто рендерит шаблоны из запросов),
то есть смысл поставить THREADS=0 это включает асинхронный движок
eventlet. Все запросы будут обрабатываться в одном потоке, асинхронно,
как в nginx. Огромные преимущества при большой нагрузке. При маленькой
нагрузке (<100 req/s) смысла нет: потоки справятся с запросами, а с
сетью nginx-фронтенд.
2009/5/21 Yuriy Taraday <yorik.sar@xxxxxxxxx>:
> Добрый вечер.
>
> Я использую связку nginx+Django. Цель - заставить приложение работать
> в определённом каталоге сервера без изменений. То есть, чтобы запросы
> вида http://server/basedir/dir/something приходили в приложение как
> /dir/something, а возвращаемые редиректы на /otherdir/thing
> превращались в http://server/basedir/otherdir/thing.
>
> При работе через модуль proxy с http-сервером Django, запросы и
> http-редиректы обрабатываются корректно без особых настроек:
> location /basedir/ { proxy_pass http://127.0.0.1:8000/; }
>
> При работе через модуль fastcgi, чтобы отрезать basedir от пути,
> приходится пользоваться alias или rewrite (и передавать соотв. строку
> в параметре REQUEST_URI), но при этом если приложение возвращает
> ошибку 302 (Temporary moved), то в заголовке Location преобразований
> пути не делается, и пользователю в приведённом примере прийдёт
> редирект на http://servеr/otherdir/thing.
>
> Хотелось бы узнать, как можно корректно настроить поведение связки
> через FastCGI.
>
> С уважением, Юрий.
>
|