Сайты на Perl (запуск через FastCGI)

Запуск скриптов через FastCGI поддерживается при проксировании на Apache 2.4.

Пример: запуск perl/Dancer проекта через FastCGI.

Домен в контрольной панели добавлен как “расширенный”, создан симлинк www для каталога public (ln -s public www):

Файл /www/.htaccess:

Options +ExecCGI
DirectoryIndex index.htm /dispatch.fcgi
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.(swf)|(jpg)|(png)|(gif)$
RewriteRule ^(.+)$ /dispatch.fcgi/$1 [L,QSA]

Файл /www/dispatch.fcgi:

#!/usr/bin/env perl
use Dancer ':syntax';
use FindBin '$RealBin';
use Plack::Handler::FCGI;

# For some reason Apache SetEnv directives dont propagate
# correctly to the dispatchers, so forcing PSGI and env here 
# is safer.
set apphandler => 'PSGI';
set environment => 'production';

$ENV{SCRIPT_NAME} = ''; # important!

my $psgi = path($RealBin, '..', 'bin', 'app.pl');
my $app  = do($psgi);
die "Unable to read startup script: $@" if $@;
my $server = Plack::Handler::FCGI->new(nproc => 1, detach => 1);

$server->run($app);

В коде основного модуля в hook before надо очистить переменную окружения SCRIPT_NAME - она некорректно обрабатывается Dancer-ом при использовании человеко-понятных URL через mod_rewrite.

hook before => sub {
    request->{env}->{SCRIPT_NAME} = ''; # we need this when running under Apache
    ...
}</pre>

Пожалуйста, обращайтесь в службу поддержки, если вам потребуется помощь с запуском FastCGI скриптов.

Тэги: dev, fastcgi, perl