Сайты на 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 скриптов.