Installation af FcgiWrap og aktivering af dynamiske sprog i Perl, Ruby og Bash på Gentoo LEMP


Denne vejledning er nøje relateret til den tidligere om LEMP-installation på Gentoo og behandler andre serverudvidede problemer såsom aktivering af dynamiske script-sprog som Perl eller Bash eller Ruby gennem Fcgiwrap Gateway og redigering af Nginx Virtual Hosts-konfigurationsfiler til at tjene dynamisk indhold ved hjælp af .pl , .rb og .cgi scripts.

  1. LEMP-stak installeret på Gentoo - https://linux-console.net/install-lemp-in-gentoo-linux/

Trin 1: Aktivér FCGIWRAP på Gentoo LEMP

Fcgiwrap er en del af Nginx FastCGI Common Gateway Interface , som behandler andre dynamiske script-sprog, som Perl eller Bash eller Ruby scripts, fungerer ved at behandle anmodninger modtaget fra Nginx via TCP eller Unix Sockets på en uafhængig måde og returnerer det producerede resultat tilbage til Nginx, som på sigt videresender svar tilbage til slutklienter.

1. Lad os først starte med at installere FCcgiwrap -processen på Gentoo Linux ved hjælp af følgende kommando.

# emerge --ask www-misc/fcgiwrap

2. Som standard leverer Fcgiwrap-pakken ingen init scripts på Gentoo til at styre processen. Når pakkerne er kompileret og installeret, skal du oprette følgende init scripts, der hjælper dig med at styre Fcgiwrap-processen ved hjælp af tre fremgangsmåder: enten at starte processen ved hjælp af Unix Domain Sockets eller ved hjælp af lokale < b> TCP-stik eller ved hjælp af begge på samme tid.

Opret en init-fil på /etc/init.d/ sti med følgende filindhold.

# nano /etc/init.d/fcgiwrap

Tilføj følgende filindhold.

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

Som du kan se, indeholder scriptfilen to variabler i starten henholdsvis ip og port . Skift disse variabler efter dine egne behov, og sørg for at de ikke overlapper andre tjenester på dit system, især portvariabel - standard her er 12345 - skift i overensstemmelse hermed.

Brug af 0.0.0.0 på IP-variabel gør det muligt for processen at binde og lytte på enhver IP (udenfor tilgængelig, hvis du ikke har en firewall), men af sikkerhedsmæssige årsager skal du ændre den for kun at lytte lokalt, på 127.0.0.1 , medmindre du har andre grunde som at eksternt opsætte Fcgiwrap gateway på en anden node til ydeevne eller belastningsbalancering.

3. Når filen er oprettet, skal du tilføje udførelsestilladelser og administrere dæmonprocessen ved hjælp af start-, stop- eller statusomskiftere. Statusomskifteren viser dig relevante stikkontaktoplysninger såsom IP-PORT par, det lytter, og hvis en aktiv forbindelse blev initialiseret. Hvis processen også har aktive forbindelser i tilstanden TIME_WAIT , kan du ikke genstarte den, før alle TCP-forbindelser lukkes.

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

Som tidligere præsenteret kan Fcgiwrap køre samtidigt ved hjælp af begge sokler, så det vil ændre navnet på det andet script let til fcgiwrap-unix-sokkel for at sikre, at begge kan startes og køres på samme tid.

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

Brug følgende filindhold til UNIX-stikket.

#!/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. Sørg igen for, at denne fil er eksekverbar, og brug de samme servicekontakter: start , stop eller status . Jeg har indstillet standardstien til dette stik på /run/fcgiwrap-unix.sock systemstien. Start processen og kontroller den ved hjælp af status switch eller liste /kør katalogindhold, og find stikket, eller brug ps -a | grep fcgiwrap kommando.

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

Som tidligere nævnt kan Fcgiwrap køre med både TCP- og UNIX-sockets samtidigt, men hvis du ikke har brug for eksterne gatewayforbindelser, skal du kun holde dig til Unix Domain Socket , fordi den bruger interprocess-kommunikation, som er hurtigere end kommunikation over TCP loopback-forbindelser og bruger mindre TCP-overhead.

Trin 2: Aktivér CGI-scripts på Nginx

5. For at Nginx skal parse og køre Perl- eller Bash-scripts via Fast Common Gateway-interface, skal virtuelle værter konfigureres med Fcgiwrap-definitioner på rodstier eller placeringsangivelser.

Nedenfor vises et eksempel (localhost), der aktiverer Perl- og CGI-scripts på alle filer placeret i rodstien (/var/www/localhost/htdocs/) med .pl og .cgi udvidelse ved hjælp af Fcgiwrap TCP-sokler til standard roddokumentsti, den anden placering ved hjælp af Unix Domain Sockets med en index.pl fil og den tredje placering bruger TCP-sockets med en index.cgi fil.

Placer følgende indhold, eller bare nogle dele af det, til den ønskede Virtual Host-konfigurationsfil, du vil aktivere dynamiske Perl- eller Bash-scripts med UNIX- eller TCP-sokler under forskellige placeringer ved at ændre fastcgi_pass argumenterklæring.

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

Rediger localhost.conf for at se ud i skabelonen nedenfor.

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. Når du er færdig med at redigere Nginx localhost.conf eller din specifikke Virtual Host-konfigurationsfil, skal du flytte til dit websteds standarddokumentrodsti, oprette disse to mapper for at afspejle din placeringserklæring og oprette indeksfiler til hvert sted med dets specifikke udvidelse.

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

Opret index.pl fil på anden placering med følgende indhold.

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

Tilføj dette indhold for at få miljøvariabler.

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

Opret derefter index.cgi fil på tredje placering med følgende indhold.

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

Tilføj dette indhold for at få miljøvariabler.

#!/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. Når du er færdig med at redigere, skal du gøre begge filer eksekverbare, genstarte Nginx-serveren og sørge for, at begge Fcgiwrap-sokler kører.

# 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

Derefter omdirigerer du din lokale browser til følgende URL.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Resultatet skal vises som på nedenstående skærmbilleder.

8. Hvis alt er på plads og korrekt konfigureret, skal begge Fcgiwrap-dæmoner starte automatisk efter genstart ved at udstede følgende kommandoer (hvis du har konfigureret Nginx til at bruge begge CGI-stik).

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

Trin 3: Aktiver Ruby-support på Fcgiwrap

9. Hvis du har brug for at køre dynamiske Ruby-scripts på Nginx FCGI, skal du installere Ruby tolk på Gentoo med følgende kommando.

# emerge --ask ruby

10. Når pakken er kompileret og installeret, skal du flytte til Nginx sites-available og redigere localhost.conf ved at tilføje følgende udsagn før sidste krøllede parentes “ } ”, som aktiverer understøttelse til at køre Ruby-scripts på en fjerde placering under standarddokumentrodstien, der betjenes af Nginx localhost.

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

Brug følgende Nginx-direktiver.

## 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. For at teste konfigurationen skal du oprette den fjerde mappe under /var/www/localhost/htdocs sti, skal du oprette et eksekverbart Ruby-indeks script med .rb udvidelse og tilføje følgende indhold.

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

Rubin index.rb eksempel.

#!/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. Når du har tilføjet eksekveringstilladelser til filen, skal du genstarte Nginx-dæmonen for at anvende konfigurationer.

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

Åbn din browser, og naviger til URL'en http:/localhost/4th/, som skal præsentere dig for følgende indhold.

Det er det for nu, du har konfigureret Nginx til at tjene dynamiske Perl-, Ruby- og Bash-scripts på FastCGI Gateway, men vær opmærksom på, at det at køre denne form for fortolkede scripts på Nginx CGI Gateway kan være farligt og pålægge din server alvorlige sikkerhedsrisici, fordi de køre ved hjælp af aktive skaller under dit system, men kan udvide statisk barriere pålagt af statisk HTML, tilføje dynamisk funktionalitet til dit websted.