Настраиваем NginX на отдачу контента, генерируемого Perl-сценариями на CentOS6. Для начала поставим spawn-fcgi

1
yum --enablerepo=epel -y install spawn-fcgi fcgi-devel

Теперь добавим кое-что для последующей сборки fcgiwrap из исходников:

1
yum -y groupinstall "Development Tools"

Скачиваем эти самые исходники:

1
wget http://github.com/gnosek/fcgiwrap/tarball/master -O fcgiwrap.tar.gz

Разархивируем:

1
tar zxvf fcgiwrap.tar.gz

И собираем:

1
2
3
4
5
6
7
8
9
cd gnosek-fcgiwrap-*
autoreconf -i
./configure
make
make install
install -d -m 755 /usr/local/sbin
install -m 755 fcgiwrap /usr/local/sbin
install -d -m 755 /usr/local/man/man8
install -m 644 fcgiwrap.8 /usr/local/man/man8

Теперь испортим NginX, уговорив его обрабатывать pl и cgi файлы. Для этого правим настройки spawn-fcgi и в конфиг nginx для нужного хоста (в нашем случае дефолтный) добавляем несколько строк.

1
vi /etc/sysconfig/spawn-fcgi
1
OPTIONS="-u nginx -g nginx -a 127.0.0.1 -p 9001 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap"
1
vi /etc/nginx/conf.d/default.conf
1
2
3
4
5
6
location ~ \.pl|cgi$ {
    fastcgi_pass   127.0.0.1:9001;
    fastcgi_index  index.cgi;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        /etc/nginx/fastcgi_params;
}

Перезагрузка NginX

1
2
3
4
/etc/rc.d/init.d/nginx restart

Stopping nginx: [ OK ]
Starting nginx: [ OK ]

Запуск spawn-fcgi

1
2
3
/etc/rc.d/init.d/spawn-fcgi start

Starting spawn-fcgi: [ OK ]

Добавляем в автозапуск на случай, если решили нарушить аптайм и ребутнули сервер

1
chkconfig spawn-fcgi on

Для проверки создадим тестовую страницу:

1
vi /usr/share/nginx/html/index.cgi
1
2
3
4
5
6
7
8
#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<html>\n<body>\n";
print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n";
print "Тестовая страница";
print "\n</div>\n";
print "</body>\n</html>\n";

Даём права на эту страницу:

1
chmod 705 /usr/share/nginx/html/index.cgi

Всё, в браузере мы должны увидеть надпись “Тестовая страница”.