memcached, backend и perl fastcgi
Igor Vinokurov
zynaps at zynaps.ru
Mon Oct 30 18:07:48 MSK 2006
Привет.
Нужен совет бывалых по паре вопросов.
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. Посоветуйте что-нибудь? Как делаете вы?
Заранее спасибо за ответы :)
--
С уважением,
Игорь Винокуров
More information about the nginx-ru
mailing list