Nginx и Perl-FastCGI в Debian 6

Рассмотрим простую настройку Perl для работы из под Nginx.
Устанавливаем fcgiwrap, и соглашаемся на установку зависимых пакетов:

apt-get install fcgiwrap
apt-get install fcgiwrap

Редактируем нужный виртуал хост nginx. Здесь для примера используется домен www.example.com Если у Вас уже есть готовый конфиг, то в него добавляем только пункт location ~ \.pl$ {…}, не забывая редактировать fastcgi_param SCRIPT_FILENAME. Вариант для использования UNIX сокетов:

vi /etc/nginx/sites-available/www.example.com
vi /etc/nginx/sites-available/www.example.com
server {
    listen   80;
    server_name www.example.com example.com;
    access_log /var/www/www.example.com/logs/access.log;
    error_log /var/www/www.example.com/logs/error.log;
    root   /var/www/www.example.com/public_html;
 
    location / {
        index  index.html index.htm;
    }
 
    location ~ \.pl$ {
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
server {
    listen   80;
    server_name www.example.com example.com;
    access_log /var/www/www.example.com/logs/access.log;
    error_log /var/www/www.example.com/logs/error.log;
    root   /var/www/www.example.com/public_html;

    location / {
        index  index.html index.htm;
    }

    location ~ \.pl$ {
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Если хотите использовать сетевой стек TCP:

vi /etc/nginx/sites-available/www.example.com
vi /etc/nginx/sites-available/www.example.com
server {
    listen   80;
    server_name www.example.com example.com;
    access_log /var/www/www.example.com/logs/access.log;
    error_log /var/www/www.example.com/logs/error.log;
    root   /var/www/www.example.com/public_html;
 
    location / {
        index  index.html index.htm;
    }
 
    location ~ \.pl$ {
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:8999;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
server {
    listen   80;
    server_name www.example.com example.com;
    access_log /var/www/www.example.com/logs/access.log;
    error_log /var/www/www.example.com/logs/error.log;
    root   /var/www/www.example.com/public_html;

    location / {
        index  index.html index.htm;
    }

    location ~ \.pl$ {
        gzip off;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:8999;
        fastcgi_index index.pl;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

В зависимости от выбранного способа работы с fcgiwrap, меняем его настройки:
Для unix сокетов:

vi /etc/init.d/fcgiwrap
vi /etc/init.d/fcgiwrap
# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_SOCKET="/var/run/$NAME.socket"
FCGI_USER="www-data"
FCGI_GROUP="www-data"
# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_SOCKET="/var/run/$NAME.socket"
FCGI_USER="www-data"
FCGI_GROUP="www-data"

Для TCP:

vi /etc/init.d/fcgiwrap
vi /etc/init.d/fcgiwrap
# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_PORT="8999"
FCGI_ADDR="127.0.0.1"
FCGI_USER="www-data"
FCGI_GROUP="www-data"
# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_PORT="8999"
FCGI_ADDR="127.0.0.1"
FCGI_USER="www-data"
FCGI_GROUP="www-data"

Перезапускаем демоны:

/etc/init.d/fcgiwrap restart
/etc/init.d/nginx restart
/etc/init.d/fcgiwrap restart
/etc/init.d/nginx restart

Для проверки работы perl, создаем файлик test.pl в каталоге сайта с содержимым:

vi /var/www/www.example.com/public_html/test.pl
vi /var/www/www.example.com/public_html/test.pl
#!/usr/bin/perl
 
print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Perl Environment Variables</title></head>
<body>
<h1>Perl Environment Variables</h1>
EndOfHTML
 
foreach $key (sort(keys %ENV)) {
    print "$key = $ENV{$key}<br>\n";
}
 
print "</body></html>";
#!/usr/bin/perl

print "Content-type:text/html\n\n";
print <<EndOfHTML;
<html><head><title>Perl Environment Variables</title></head>
<body>
<h1>Perl Environment Variables</h1>
EndOfHTML

foreach $key (sort(keys %ENV)) {
    print "$key = $ENV{$key}<br>\n";
}

print "</body></html>";

Меняем владельца и даем права на запуск:

chown www-data:www-data /var/www/www.example.com/public_html/test.pl
chmod a+x /var/www/www.example.com/public_html/test.pl
chown www-data:www-data /var/www/www.example.com/public_html/test.pl
chmod a+x /var/www/www.example.com/public_html/test.pl

Ну и перейдя по адресу example.com/test.pl, если все верно настроено, увидите служебную информацию о работе fciwrap и perl.

Оригинал статьи на http://library.linode.com

VN:F [1.9.22_1171]
Рейтинг: 10.0/10 (1 голос)
Nginx и Perl-FastCGI в Debian 6, 10.0 out of 10 based on 1 rating

2 Ответы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *