FcgiWrapi installimine ning dünaamiliste keelte Perl, Ruby ja Bash lubamine Gentoo LEMP-s


See õpetus on rangelt seotud endisega LEMP-i installimisel Gentoo-s ja käsitleb muid serveri laiendatud probleeme, nagu näiteks dünaamiliste skriptikeelte lubamine nagu Perl või Bash või Ruby Fcgiwrap Gateway kaudu ja Nginx Virtual Hosts'i konfiguratsioonifailide muutmine dünaamilise sisu teenimiseks abil skriptid .pl , .rb ja .cgi .

  1. GEMP-sse installitud LEMP-i virn - https://linux-console.net/install-lemp-in-gentoo-linux/

1. samm: lubage Gentoo LEMP-is FCGIWRAP

Fcgiwrap on osa Nginx FastCGI ühisest lüüsiliidest , mis töötleb muid dünaamilisi skriptikeeli, näiteks Perli, Bashi või Ruby skripte, töötades Nginxilt TCP või Unixi pistikupesad tagastavad saadud tulemuse tagasi Nginxile, mis aja jooksul edastab vastused lõppklientidele.

1. Alustame kõigepealt FCcgiwrap protsessi installimisega Gentoo Linuxi, kasutades järgmist käsku.

# emerge --ask www-misc/fcgiwrap

2. Vaikimisi ei paku Fcgiwrap pakett protsessi haldamiseks Gentoo-s init skripte. Pärast pakettide koostamist ja installimist looge järgmised init skriptid, mis aitavad teil Fcgiwrap-protsessi hallata kolme lähenemisviisi abil: kas protsessi käivitamine Unix Domain Sockets või kohalik < b> TCP-pistikupesad või mõlema samaaegne kasutamine.

Looge teele /etc/init.d/ init fail järgmise faili sisuga.

# nano /etc/init.d/fcgiwrap

Lisage järgmine faili sisu.

#!/sbin/runscript

ip="0.0.0.0"
port="12345"

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 "Fcgiwarp 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 "Fcgiwarp process is running!"
                 echo -e "Socket details: \n$tcp_sock"
                fi
eend $? "Errors were encountered while stopping fcgiwrap process..."
}

Nagu näete, sisaldab skriptifail alguses kahte muutujat vastavalt ip ja port . Muutke neid muutujaid vastavalt oma vajadustele ja veenduge, et need ei kattuks teiste teie süsteemi teenustega, eriti pordimuutujaga - vaikimisi on siin 12345 - muutke vastavalt.

0.0.0.0 kasutamine IP-muutuja juures võimaldab protsessil siduda ja kuulata mis tahes IP-d (väljaspool juurdepääsu, kui teil pole tulemüüri), kuid turvalisuse huvides peaksite selle muutma ainult kohalikuks kuulamiseks. jaotises 127.0.0.1 , välja arvatud juhul, kui teil on muid põhjusi, näiteks Fcgiwrapi lüüsi kaugseadistamine mõnes muus sõlmes jõudluse või koormuse tasakaalustamiseks.

3. Pärast faili loomist lisage käivitamisõigused ja hallake deemoniprotsessi algus-, peatamis- või olekulülitite abil. Olekulüliti näitab teile asjakohast pistikupesa teavet, näiteks IP-PORT paari, mida see kuulab, ja kui mõni aktiivne ühendus on algatatud. Samuti, kui protsessil on olekus TIME_WAIT aktiivsed ühendused, ei saa te seda uuesti käivitada enne, kui kõik TCP-ühendused sulguvad.

# chmod +x /etc/init.d/fcgiwrap
# service start fcgiwrap
# /etc/init.d/fcgiwrap status

Nagu varem näidatud, saab Fcgiwrap käitada samaaegselt mõlema sokli abil, seega muudab teise skripti nimi veidi fcgiwrap-unix-socket , et tagada mõlema käivitamine ja käivitamine samal ajal.

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

Kasutage UNIX-i pesa jaoks järgmist failisisu.

#!/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..."
}

4. Veenduge uuesti, et see fail on käivitatav ja kasutage samu teenuselülitid: algus , seiskamine või olek . Olen selle sokli vaiketee määranud süsteemiteele /run/fcgiwrap-unix.sock . Käivitage protsess ja kontrollige seda lüliti olek abil või loendiga /käivitage kataloogi sisu ja leidke pesa või kasutage ps -a | grep fcgiwrap käsk.

# chmod +x /etc/init.d/fcgiwrap-unix-socket
# service start fcgiwrap-unix-socket
# /etc/init.d/fcgiwrap-unix-socket status
# ps -a | grep fcgiwrap

Nagu varem mainitud, saab Fcgiwrap töötada nii TCP kui ka UNIX pesadega samaaegselt, kuid kui te ei vaja väliseid lüüsiühendusi, siis hoidke ainult Unix Domain Socket , sest see kasutab protsessidevahelist suhtlust, mis on kiirem kui üle TCP loopback ühendused ja kasutab vähem TCP üldkulusid.

2. samm: lubage Nginxis CGI-skriptid

5. Et Nginx saaks Perli või Bashi skripte sõeluda ja käivitada läbi Fast Common Gateway Interface'i, peavad virtuaalsed hostid olema konfigureeritud Fcgiwrap-definitsioonidega juurteel või asukoha lausetes.

Allpool on toodud näide (localhost), mis aktiveerib Perli ja CGI skriptid kõigil juurteele asetatud failidel (/var/www/localhost/htdocs/) .pl ja .cgi laiendus, kasutades juurdokumendi vaiketee jaoks Fcgiwrap TCP-sokleid, teine asukoht kasutab Unix Domain Sockets -i koos failiga index.pl ja kolmas asukoht kasutab TCP-pistikupesasid koos failiga index.cgi .

Asetage järgmine sisu või ainult osa sellest soovitud virtuaalhosti konfiguratsioonifaili, mille soovite aktiveerida UNIX- või TCP-pistikupesadega dünaamilised Perli või Bashi skriptid erinevate asukohtade all, muutes argumenti fastcgi_pass .

# nano /etc/nginx/sites-available/localhost.conf

Muutke localhost.conf , et see näeks välja nagu allolevas mallis.

server {
                                listen 80;
                                server_name localhost;

access_log /var/log/nginx/localhost_access_log main;
error_log /var/log/nginx/localhost_error_log info;

               root /var/www/localhost/htdocs/;
                location / {
                autoindex on;
                index index.html index.htm index.php;
                                }

## PHP –FPM Gateway ###
                            location ~ \.php$ {
                            try_files $uri =404;
                            include /etc/nginx/fastcgi.conf;
                            fastcgi_pass 127.0.0.1:9001;
				}

## Fcgiwrap Gateway on all files under root with TCP Sockets###
location ~ \.(pl|cgi|rb)$ {
                fastcgi_index index.cgi index.pl;
                include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:12345;    
                                }                                                                                                                             

## Fcgiwrap Gateway on all files under root second folder with index.pl using UNIX Sockets###
location /second {
                                index index.pl; 
root /var/www/localhost/htdocs/;
                                location ~ \.(pl|cgi|rb)$ {
                                include /etc/nginx/fastcgi.conf;
                                fastcgi_pass unix:/run/fcgiwrap-unix.sock;      
                                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                                             }                                                                                                            
                                                }

## Fcgiwrap Gateway on all files under root third folder with index.cgi using TCP Sockets###
location /third {
                                index index.cgi;               
                                location ~ \.(pl|cgi|rb)$ {
                                include /etc/nginx/fastcgi.conf;
                                 fastcgi_pass 127.0.0.1:12345;       
                                }                                                                                             
  }

6. Kui olete lõpetanud Nginx localhost.conf või konkreetse virtuaalse hosti konfiguratsioonifaili redigeerimise, minge oma veebisaidi vaikedokumendi juurteele, looge need kaks kausta, et need kajastaksid teie asukohaväljendit, ja looge igas asukohas koos konkreetse laiendiga.

# cd /var/www/localhost/htdocs
# mkdir second third

Looge teises asukohas järgmise sisuga fail index.pl .

# nano /var/www/localhost/htdocs/second/index.pl

Lisage see sisu keskkonnamuutujate saamiseks.

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<HTML;
                <html>
                <head><title>Perl Index</title></head>
                <body>
                                <div align=center><h1>A Perl CGI index on second location with env variables</h1></div>
                </body>
HTML
print "Content-type: text/html\n\n"; foreach my $keys (sort keys %ENV) { print "$keys =
$ENV{$keys}<br/>\n";
}
exit;

Seejärel looge järgmise sisuga fail index.cgi kolmandas asukohas.

# nano /var/www/localhost/htdocs/third/index.cgi

Lisage see sisu keskkonnamuutujate saamiseks.

#!/bin/bash
echo Content-type: text/html
echo ""
cat << EOF
<HTML>
<HEAD><TITLE>Bash script</TITLE></HEAD>
<BODY><PRE>
<div align=center><h1>A BASH CGI index on third location with env variables</h1></div>
EOF
env
cat << EOF
</BODY>
</HTML>
EOF

7. Pärast redigeerimise lõpetamist tehke mõlemad failid käivitatavaks, taaskäivitage Nginx-server ja veenduge, et mõlemad Fcgiwrap-pesad töötaksid.

# chmod +x /var/www/localhost/htdocs/second/index.pl
# chmod +x /var/www/localhost/htdocs/third/index.cgi
# service nginx restart
# service fcgiwrap start
# service fcgiwrap-unix-socket start

Järgmisena suunake oma kohalik brauser ümber järgmisele URL-ile.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Tulemus peaks ilmuma nagu ekraanipiltide all.

8. Kui kõik on paigas ja õigesti konfigureeritud, lubage mõlemal Fcgiwrap-deemonil automaatselt käivitada pärast taaskäivitamist, väljastades järgmised käsud (juhul kui olete Nginxi konfigureerinud mõlemat CGI-pesa kasutama).

# rc-update add fcgiwrap default
# rc-update add fcgiwrap-unix-socket default

3. samm: aktiveerige Fcgiwrapis Ruby tugi

9. Kui peate Nginx FCGI-s käitama dünaamilisi Ruby-skripte, peate installima Gentoo Ruby -tõlgi järgmise käsuga.

# emerge --ask ruby

10. Kui pakett on kompileeritud ja installitud, minge Nginxi saidid-saadaval ja muutke faili localhost.conf , lisades järgmised laused enne viimast lokkisulgu \"}" , mis aktiveerib toe Ruby-skriptide käitamiseks neljandas asukohas dokumendi vaikerežiimi all, mida teenib Nginx localhost.

# nano /etc/nginx/sites-available/localhost.conf

Kasutage järgmisi Nginxi direktiive.

## Fcgiwrap Gateway on all files under root fourth folder with index.rb under TCP Sockets###
                location /fourth {
                                index index.rb;
                                location ~ \.rb$ {
                                include /etc/nginx/fastcgi.conf;
                                fastcgi_pass 127.0.0.1:12345;       
                                                }                                                                                                             
                               }             
## Last curly bracket which closes Nginx server definitions ##
}

11. Nüüd saate konfiguratsiooni testimiseks luua neljanda kataloogi tee /var/www/localhost/htdocs all, looge käivitatav Ruby indeksskript laiendiga .rb ja lisage järgmine sisu.

# mkdir /var/www/localhost/htdocs/fourth
# nano /var/www/localhost/htdocs/fourth/index.rb

Rubiini index.rb näide.

#!/usr/bin/ruby
puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><HEAD><TITLE>Ruby script</TITLE></HEAD>"
puts "<BODY><PRE>"
puts "<div align=center><h1>A Ruby CGI index on fourth location with env variables</h1></div>"
system('env')

12. Pärast faili täitmisõiguste lisamist taaskäivitage Nginxi deemon konfiguratsioonide rakendamiseks.

# chmod +x /var/www/localhost/htdocs/fourth/index.rb
# service nginx restart

Avage oma brauser ja navigeerige URL-i http:// localhost/neljas/, mis peaks teile esitama järgmise sisu.

Praegu on see nii, et olete konfigureerinud Nginxi dünaamiliste Perli, Rubiini ja Bashi skriptide teenimiseks FastCGI Gateway'is, kuid pidage meeles, et sellist tüüpi tõlgendatud skriptide käitamine Nginx CGI Gateway'is võib olla ohtlik ja põhjustada tõsiseid turvariske teie serveris, kuna need käivitage oma süsteemi all aktiivsete kestade abil, kuid saate laiendada staatilise HTML-i kehtestatud staatilist barjääri, lisades teie veebisaidile dünaamilise funktsionaalsuse.