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