L-installazzjoni ta' FcgiWrap u l-Attivazzjoni tal-Lingwi Dinatiċi Perl, Ruby u Bash fuq Gentoo LEMP


Dan it-tutorja huwa strettament relatat ma' dak preċedenti dwar l-Installazzjoni LEMP fuq Gentoo u jittratta kwistjonijiet oħra estiżi tas-server bħall-abilitazzjoni ta' lingwi ta' skriptjar dinamiċi bħal Perl jew Bash jew Ruby permezz ta' Fcgiwrap Gateway, u editja fajls ta' konfigurazzjoni ta' Nginx Virtual Hosts biex iservu kontenut dinamiku bl-użu ta' skripts .pl, .rb u .cgi.

  1. LEMP stack installat fuq Gentoo – https://linux-console.net/install-lemp-in-gentoo-linux/

Pass 1: Ippermetti FCGIWRAP fuq Gentoo LEMP

Fcgiwrap hija parti minn Nginx FastCGI Common Gateway Interface li tipproċessa lingwi dinamiċi oħra ta’ skripts, bħal Perl jew Bash jew Ruby skripts, taħdem billi tipproċessa talbiet riċevuti minn Nginx, permezz ta’ TCP jew Sockets Unix, b'mod indipendenti u jirritorna r-riżultat prodott lura lil Nginx, li, fit-terminu, se jgħaddi r-risposti lura lill-klijenti finali.

1. Ejja l-ewwel nibdew billi ninstallaw FCcgiwrap proċess fuq Gentoo Linux billi tuża l-kmand li ġej.

# emerge --ask www-misc/fcgiwrap

2. B'mod awtomatiku, il-pakkett Fcgiwrap ma jipprovdi l-ebda skripts init fuq Gentoo biex jimmaniġġja l-proċess. Wara li l-pakketti jkunu ġew ikkumpilati u installati, oħloq l-iskripts init li ġejjin li jgħinuk timmaniġġja l-proċess ta’ Fcgiwrap billi tuża tliet approċċi: jew tniedi l-proċess billi tuża Sockets tad-Dominju Unix jew tuża < lokali b>Sockets TCPjew jużaw it-tnejn fl-istess ħin.

Oħloq fajl init fuq il-mogħdija /etc/init.d/ bil-kontenut tal-fajl li ġej.

# nano /etc/init.d/fcgiwrap

Żid il-kontenut tal-fajl li ġej.

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

Kif tistgħu taraw il-fajl tal-iskript għandu żewġ varjabbli fil-bidu, rispettivament ip u port. Ibdel din il-varjabbli bil-bżonnijiet tiegħek stess u kun żgur li ma jikkoinċidux ma 'servizzi oħra fis-sistema tiegħek, speċjalment il-varjabbli tal-port - default hawnhekk hija 12345 - ibdel kif xieraq.

L-użu ta' 0.0.0.0 fuq varjabbli IP jippermetti li l-proċess jorbot u jisma' fuq kwalunkwe IP (barra aċċessibbli jekk ma jkollokx firewall ), iżda għal raġunijiet ta' sigurtà għandek tibdelha biex tisma' lokalment biss, fuq 127.0.0.1, sakemm ma jkollokx raġunijiet oħra bħall-issettjar mill-bogħod ta' Fcgiwrap gateway fuq node differenti għall-prestazzjoni jew l-ibbilanċjar tat-tagħbija.

3. Wara li jinħoloq il-fajl, waħħal il-permessi ta 'eżekuzzjoni u mmaniġġja l-proċess tad-daemon billi tuża swiċċijiet tal-bidu, tal-waqfien jew tal-istatus. Is-swiċċ tal-istatus jurik informazzjoni rilevanti dwar is-socket bħal IP-PORT par li jisma' u jekk xi konnessjoni attiva tkun inizjalizzata. Ukoll, jekk il-proċess ikollu konnessjonijiet attivi fl-istat ta' TIME_WAIT ma tistax terġa' tibda sakemm jagħlqu l-konnessjonijiet TCP kollha.

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

Kif ippreżentat qabel Fcgiwrap jista' jaħdem fl-istess ħin billi juża ż-żewġ sockets, għalhekk se jibdel xi ftit l-isem tat-tieni script għal fcgiwrap-unix-socket, biex jiġi żgurat li t-tnejn jistgħu jinbdew u jitħaddmu fl-istess ħin.

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

Uża l-kontenut tal-fajl li ġej għas-socket UNIX.

#!/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. Għal darb'oħra assigura li dan il-fajl huwa eżekutibbli u uża l-istess swiċċijiet tas-servizz: start, stop jew status. Jiena stabbilejt il-mogħdija default għal dan is-socket fuq il-mogħdija tas-sistema /run/fcgiwrap-unix.sock. Ibda l-proċess u vverifikah billi tuża status swiċċ jew lista /run kontenut tad-direttorju u sib is-socket, jew uża ps -a | grep fcgiwrapkmand.

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

Kif issemma qabel Fcgiwrap jista' jaħdem kemm b'sockets TCP kif ukoll UNIX simultanjament, imma jekk m'għandekx bżonn konnessjonijiet tal-gateway esterni żomm ma' Socket ta' Dominju Unix biss, minħabba li juża komunikazzjoni bejn proċessi, li hija aktar mgħaġġla minn komunikazzjoni fuq TCP loopback konnessjonijiet, u juża inqas TCP overhead.

Pass 2: Ippermetti CGI Scripts fuq Nginx

5. Biex Nginx janalizza u jħaddem skripts Perl jew Bash permezz tal-Interface Fast Common Gateway, l-Ospiti Virtwali għandhom jiġu kkonfigurati b'definizzjonijiet Fcgiwrap fuq id-dikjarazzjonijiet tal-mogħdija tal-għeruq jew tal-post.

Eżempju, huwa ppreżentat hawn taħt (localhost), li jattiva skripts Perl u CGI fuq il-fajls kollha mqiegħda fil-mogħdija tal-għeruq (/var/www/localhost/htdocs/) bi .pl u l-estensjoni ta' .cgi bl-użu ta' Fcgiwrap TCP Sockets għall-mogħdija tad-dokument għeruq default, it-tieni post bl-użu ta' Sockets tad-Dominju Unix, b'fajl index.pl u t-tielet post qed juża sockets TCP b'fajl index.cgi.

Poġġi l-kontenut li ġej, jew xi partijiet biss minnu, fil-fajl tal-konfigurazzjoni tal-Ospiti Virtwali mixtieq tiegħek li trid tattiva skripts dinamiċi Perl jew Bash b'Sockets UNIX jew TCP taħt postijiet differenti, billi timmodifika l-istqarrija tal-argument fastcgi_pass.

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

Editja localhost.conf biex tidher bħal fil-mudell hawn taħt.

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. Wara li tispiċċa teditja Nginx localhost.conf, jew il-fajl tal-konfigurazzjoni tal-Ospitanti Virtwali speċifiku tiegħek, imxi għall-mogħdija ta' l-għerq tad-dokument default tal-websajt tiegħek, oħloq dawk iż-żewġ folders biex jirriflettu d-dikjarazzjoni tal-lokalità tiegħek, u oħloq fajls tal-indiċi għal kull post bl-estensjoni speċifika tiegħu.

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

Oħloq fajl index.pl fit-tieni post bil-kontenut li ġej.

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

Żid dan il-kontenut biex tikseb varjabbli ambjentali.

#!/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;

Imbagħad oħloq fajl index.cgi fit-tielet post bil-kontenut li ġej.

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

Żid dan il-kontenut biex tikseb varjabbli ambjentali.

#!/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. Meta tispiċċa l-editjar, agħmel iż-żewġ fajls eżekutibbli, ibda mill-ġdid is-server Nginx u kun żgur li ż-żewġ sockets Fcgiwrap qed jaħdmu.

# 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

Sussegwentement, idderieġi mill-ġdid il-browser lokali tiegħek fuq l-URL li ġej.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Ir-riżultat għandu jidher kif hawn taħt screenshots.

8. Jekk kollox huwa f'postu u kkonfigurat b'mod korrett, ippermetti liż-żewġ daemons Fcgiwrap jibdew awtomatikament, wara reboot billi toħroġ il-kmandi li ġejjin (f'każ li kkonfigurajt Nginx biex juża ż-żewġ sockets CGI).

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

Pass 3: Attiva l-appoġġ Ruby fuq Fcgiwrap

9. Jekk għandek bżonn tħaddem skripts Ruby dinamiċi fuq Nginx FCGI trid tinstalla Ruby interpretu fuq Gentoo bil-kmand li ġej.

# emerge --ask ruby

10. Wara li l-pakkett ikun ġie kkompilat u installat, mur għal Nginx siti-disponibbli u editja l-fajl localhost.conf billi tehmeż id-dikjarazzjonijiet li ġejjin qabel l-aħħar parentesi kaboċċi \ } ”, li jattiva l-appoġġ biex imexxi skripts Ruby fuq ir-raba 'post taħt il-mogħdija ta' l-għeruq tad-dokument default moqdija minn Nginx localhost.

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

Uża d-direttivi Nginx li ġejjin.

## 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. Issa, biex tittestja l-konfigurazzjoni oħloq ir-raba 'direttorju taħt il-mogħdija /var/www/localhost/htdocs, oħloq skript ta' indiċi Ruby eżekutibbli b'estensjoni .rb u żid dan li ġej kontenut.

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

Ruby index.rb eżempju.

#!/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. Wara li żżid il-permessi ta 'eżekuzzjoni fuq il-fajl, ibda mill-ġdid Nginx daemon biex tapplika konfigurazzjonijiet.

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

Iftaħ il-browser tiegħek u naviga għall-URL http://localhost/fourth/, li għandu jippreżentalek il-kontenut li ġej.

Dak hu għalissa, inti kkonfigurajt Nginx biex iservi skripts dinamiċi Perl, Ruby u Bash fuq FastCGI Gateway, iżda, kun konxju li t-tħaddim ta 'dan it-tip ta' skripts interpretati fuq Nginx CGI Gateway jista 'jkun perikoluż u jimponi serjament riskji ta' sigurtà fuq is-server tiegħek għaliex dawn tmexxi bl-użu ta 'qxur attivi taħt is-sistema tiegħek, iżda tista' tespandi ostaklu statiku impost minn HTML statiku, u żżid funzjonalità dinamika mal-websajt tiegħek.