Подключение Perl к веб-серверу nginx в Gentoo

Данная инструкция позволяет запустить интерпретатор Perl и расширить стек LEMP на ОС Gentoo GNU/Linux.

Настройка LEMP-сервера для Gentoo описана здесь: https://dondub.com/2021/07/zapusk-lemp-servera-v-gentoo/

Устанавливаем необходимые пакеты

# emerge --ask nginx perl fcgiwrap

Затем открываем основной файл конфигурации nginx

# nano /etc/nginx/nginx.conf

и в секции server меняем значения listen и server_name, например так:

server {
...
    listen 192.168.1.45;
    server_name gvm45.homenet.local;
...
}

После этого запускаем службу nginx и включаем её в автозагрузку

# rc-service nginx start
# rc-update add nginx default

Далее создадим два каталога в директории /var/www/localhost/: htdocs для хранения html и/или прочих файлов и cgi-bin для Perl-скриптов

# mkdir /var/www/localhost/{htdocs,cgi-bin}/

и для /var/www/localhost/cgi-bin/ создадим необходимые права

# chmod 755 /var/www/localhost/cgi-bin/

Затем создадим файл конфигурации /etc/nginx/fcgiwrap.conf

# touch /etc/nginx/fcgiwrap.conf

откроем его

# nano /etc/nginx/fcgiwrap.conf

и внесём в него такие строки:

location /cgi-bin/ {

    gzip off;
	
    root  /var/www/localhost;
	
    fastcgi_pass  unix:/var/run/fcgiwrap-unix.sock;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Также в основном файле конфигурации nginx в самом конце секции server перед закрывающей скобкой добавим строчку для включения файла конфигурации fcgiwrap.conf:

server {
    ...
    include /etc/nginx/fcgiwrap.conf;
}

Теперь создадим 2 файла для работы служб fcgiwrap и fcgiwrap-unix-socket и зададим им права на запуск

# touch /etc/init.d/{fcgiwrap,fcgiwrap-unix-socket}
# chmod +x /etc/init.d/{fcgiwrap,fcgiwrap-unix-socket}

Откроем первый — /etc/init.d/fcgiwrap

# nano /etc/init.d/fcgiwrap

и впишем скрипт:

#!/sbin/runscript

ip="127.0.0.1"
port="9001"

start() {
ebegin "Starting fcgiwrap process..."
       /usr/sbin/fcgiwrap -s tcp:$ip:$port &
        tcp_sock=`netstat -tulpn | grep fcgiwrap`
        echo "Socket details: $tcp_sock"
eend $? "Errors were encountered while starting fcgiwrap process"
}

stop() {
ebegin "Stopping fcgiwrap process..."
                pid=`ps a | grep fcgiwrap | grep tcp | cut -d" " -f1`
kill -s 1 $pid
                tcp_sock=`netstat -tulpn | grep fcgiwrap`
                 if test $tcp_sock =  2> /dev/null ; then
                 echo "Fcgiwrap process successfully stoped"
                tcp_sock=`netstat -atulpn | grep $port`
                if test $tcp_sock =  2> /dev/null ; then
                echo "No open fcgiwrap connection found..."
                else
                echo "Wait to close fcgiwrap open connections...please verify with 'status'"
                echo -e "Socket details: \n$tcp_sock"
                 fi
                else
                echo "Fcgiwrap process is still running!"
        echo "Socket details: $tcp_sock"
        fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

status() {
ebegin "Status fcgiwrap process..."
      tcp_sock=`netstat -atulpn | grep $port`
    if test $tcp_sock =  2> /dev/null ; then
                       echo "Fcgiwrap process not running"
                     else
                echo "Fcgiwrap process is running!"
                 echo -e "Socket details: \n$tcp_sock"
                fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

Данный скрипт был взят отсюда: https://ru.linux-console.net/?p=874

Откроем второй — /etc/init.d/fcgiwrap-unix-socket

# nano /etc/init.d/fcgiwrap-unix-socket

и впишем такой скрипт:

#!/sbin/runscript

sock_detail=`ps a | grep fcgiwrap-unix | head -1`

start() {
ebegin "Starting fcgiwrap-unix-socket process..."
        /usr/sbin/fcgiwrap -s unix:/run/fcgiwrap-unix.sock &
        sleep 2
        /bin/chown nginx:nginx /run/fcgiwrap-unix.sock
        sleep 1
        sock=`ls -al /run/fcgiwrap-unix.sock`
        echo "Socket details: $sock"
eend $? "Errors were encountered while starting fcgiwrap process"
}

stop() {
ebegin "Stopping fcgiwrap-unix-socket process..."
                pid=`ps a | grep fcgiwrap | grep unix | cut -d" " -f1`
                rm -f /run/fcgiwrap-unix.sock                 
                kill -s 1 $pid
                echo "Fcgiwrap process successfully stoped"
                #killall /usr/sbin/fcgiwrap
        sleep 1
        echo "Socket details: $sock"
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

status() {
ebegin "Status fcgiwrap-unix-socket process..."
  if test -S /run/fcgiwrap-unix.sock; then
       echo "Process is started with socket: $sock_detail"
        else
        echo "Fcgiwrap process not running!"
        fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

Данный скрипт был взят отсюда: https://ru.linux-console.net/?p=874

Теперь запустим обе службы и включим их в автозагрузку

# rc-service fcgiwrap start
# rc-upddate add fcgiwrap default
# rc-service fcgiwrap-unix-socket start
# rc-update add fcgiwrap-unix-socket default

а также пора перезапустить службу nginx

# rc-service nginx restart

Готово! Теперь создадим проверочный Perl-скрипт welcome.cgi и откроем его

# touch /var/www/localhost/cgi-bin/welcome.cgi
# chmod 755 /var/www/localhost/cgi-bin/welcome.cgi
# nano /var/www/localhost/cgi-bin/welcome.cgi

запишем в него такие строки:

#!/usr/bin/perl

print "Content-Type: text/html; charset=utf-8 \n\n";
print "<h1>Файл welcome.cgi работает!</h1>";

На другой машине в сети в адресной строке браузера введём http://IP_адрес_или_имя_хоста/cgi-bin/welcome.cgi и увидим страницу с сообщением:

Файл welcome.cgi работает!

Также создадим скрипт с краткой информацией о данном сервере

# touch /var/www/localhost/cgi-bin/cgi.pl
# chmod 755 /var/www/localhost/cgi-bin/cgi.pl

откроем его

# nano /var/www/localhost/cgi-bin/cgi.pl

и впишем такие строки:

#!/usr/bin/perl

print "Content-Type: text/plain; charset=utf-8 \r\n\r\n";
print "Информация о сервере: \n";

foreach ( keys %ENV  ) {
        print "$_\t$ENV{$_}\n";
}

На странице должна отобразиться информация о сервере.

Для подключения к базе данных с помощью скриптов Perl необходимо будет установить и дополнительные пакеты. Это описано здесь: https://dondub.com/2022/03/podklyuchenie-perl-k-lamp-serveru-v-gentoo/

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

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