Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
memcached, backend и perl fastcgi
- To: nginx-ru@xxxxxxxxx
- Subject: memcached, backend и perl fastcgi
- From: "Igor Vinokurov" <zynaps@xxxxxxxxx>
- Date: Mon, 30 Oct 2006 18:07:48 +0300
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:sender:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition:x-google-sender-auth; b=RKAHDOHM39D8NaGcrVjUEyIV3JNH8vFjTsg0ge7juWWaVCJIf1AyidUTrtuWVGtUGKyefmZoG7f8A58YNJTn2NsTkMYompT+ObL53NJkKMCmb8R4b9vU2Zzch4MVYSoY11ggKuq1J0bWihIj/fU1ymynu+MwCkWIZDylONmIUT4=
Привет.
Нужен совет бывалых по паре вопросов.
1.
Обычная задача: динамический сайт, front-end - nginx, back-end -
fastcgi на перле. Нужно кэшировать все в memcached.
Скрипты при обращении к ним отдают страницу и пишут ее в memcached,
где ее потом находит nginx при втором обращении к этой же странице.
Конфиг nginx:
location / {
default_type text/html; charset windows-1251;
memcached_pass localhost:11211;
error_page 404 = /backend/;
}
location /backend/ {
# грязный хак?
rewrite .* $request_uri;
# список айтемов
rewrite ^(/?.*/)$ /cgi-bin/index.pl?qs=$1? last;
# детали айтема
rewrite ^/item/(\d+)/$ /cgi-bin/details.pl?it=$1? last;
# остальные - в сад
return 404;
}
location /cgi-bin/details.pl {
fastcgi_pass unix:/tmp/details.sock;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
}
location /cgi-bin/index.pl {
fastcgi_pass unix:/tmp/index.sock;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
}
Эта конструкция вполне работает. Вопрос: можно ли сделать как-то
элегантнее? Особенно волнует конструкция
# грязный хак?
rewrite .* $request_uri;
без которой не обойтись, поскольку после 'error_page 404 = /backend/'
$uri имеет значение /backend/. Может опытные товарищи делают как-то
иначе? Как правильно?
Будет ли лучше в скриптах писать страницу в memcached, а nginx'у
отдавать только internal redirect на нее?
2.
Как вы запускаете standalone perl fastcgi? Я использую сейчас
FCGI::ProcManager, но хочется, чтобы он все-таки отцеплялся от
терминала и висел демоном. Достаточно ли будет fork и detach?
Попробовал сделать как в Catalyst::Engine::FastCGI, но результат
нестабильный - в паре запусков из 10 скрипт молча выходит и не слушает
сокет. Magic. Посоветуйте что-нибудь? Как делаете вы?
Заранее спасибо за ответы :)
--
С уважением,
Игорь Винокуров
|