Að setja upp FcgiWrap og virkja Perl, Ruby og Bash Dynamic Languages á Gentoo LEMP


Þessi kennsla er stranglega tengd fyrrum um LEMP uppsetningu á Gentoo og meðhöndlar önnur útbreidd vandamál eins og að virkja kraftmikil forskriftarmál eins og Perl eða Bash eða Ruby í gegnum Fcgiwrap Gateway, og breyta Nginx Virtual Hosts stillingarskrám til að þjóna kraftmiklu efni með .pl, .rb og .cgi forskriftir.

  1. LEMP stafla settur upp á Gentoo – https://linux-console.net/install-lemp-in-gentoo-linux/

Skref 1: Virkjaðu FCGIWRAP á Gentoo LEMP

Fcgiwrap er hluti af Nginx FastCGI Common Gateway Interface sem vinnur önnur kraftmikil forskriftarmál, eins og Perl eða Bash eða Ruby forskriftir, vinna með því að vinna úr beiðnum sem berast frá Nginx, í gegnum TCP eða Unix Sockets, á óháðan hátt og skilar framleiddri niðurstöðu til baka til Nginx, sem á tímabili mun senda svör aftur til enda viðskiptavina.

1. Byrjum fyrst á því að setja upp FCcgiwrap ferli á Gentoo Linux með því að nota eftirfarandi skipun.

# emerge --ask www-misc/fcgiwrap

2. Sjálfgefið er að Fcgiwrap pakkinn veitir engin init forskrift á Gentoo til að stjórna ferlinu. Eftir að pakkarnir hafa verið teknir saman og settir upp skaltu búa til eftirfarandi init forskriftir sem hjálpa þér að stjórna Fcgiwrap ferli með þremur aðferðum: annaðhvort að ræsa ferlið með Unix Domain Sockets eða nota staðbundna b>TCP innstungur eða nota báðar á sama tíma.

Búðu til init skrá á /etc/init.d/ slóð með eftirfarandi skráarinnihaldi.

# nano /etc/init.d/fcgiwrap

Bættu við eftirfarandi skráarefni.

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

Eins og þú sérð hefur handritaskráin tvær breytur í upphafi, í sömu röð ip og port. Breyttu þessum breytum með þínum eigin þörfum og vertu viss um að þær skarist ekki við aðra þjónustu á kerfinu þínu, sérstaklega portbreytu – sjálfgefin hér er 12345 – breyttu í samræmi við það.

Notkun 0.0.0.0 á IP breytu gerir ferlinu kleift að bindast og hlusta á hvaða IP sem er (aðgengilegt utan ef þú ert ekki með eldvegg ), en af öryggisástæðum ættirðu að breyta því þannig að það hlustar aðeins á staðnum, á 127.0.0.1, nema þú hafir aðrar ástæður eins og fjaruppsetningu Fcgiwrap gáttar á öðrum hnút fyrir frammistöðu eða álagsjafnvægi.

3. Eftir að skráin er búin til skaltu bæta við framkvæmdarheimildum og stjórna púkaferlið með því að nota upphafs-, stöðvunar- eða stöðurofa. Staða rofinn mun sýna þér viðeigandi tengiupplýsingar eins og IP-PORT par sem það hlustar og hvort einhver virk tenging hafi verið frumstillt. Einnig, ef ferlið hefur virkar tengingar í TIME_WAIT ástandi geturðu ekki endurræst það fyrr en allar TCP tengingar lokast.

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

Eins og kynnt var áðan getur Fcgiwrap keyrt samtímis með því að nota báðar sockets, svo mun breyta nafni seinni skriftunnar lítillega í fcgiwrap-unix-socket, til að tryggja að hægt sé að ræsa báða og keyra á sama tíma.

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

Notaðu eftirfarandi skráarefni fyrir UNIX fals.

#!/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. Gakktu úr skugga um að þessi skrá sé keyranleg og notaðu sömu þjónusturofa: start, stop eða status. Ég hef stillt sjálfgefna slóð fyrir þessa fals á /run/fcgiwrap-unix.sock kerfisslóð. Byrjaðu ferlið og staðfestu það með því að nota stöðu rofa eða lista /run skráarefni og finndu falsið, eða notaðu ps -a | grep fcgiwrap skipun.

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

Eins og áður hefur komið fram getur Fcgiwrap keyrt með bæði TCP og UNIX innstungum samtímis, en ef þú þarft ekki utanaðkomandi gáttartengingar haltu þig aðeins við Unix Domain Socket vegna þess að það notar millivinnslusamskipti, sem er hraðari en samskipti yfir TCP loopback tengingar, og notar minna TCP kostnaður.

Skref 2: Virkjaðu CGI forskriftir á Nginx

5. Til að Nginx geti flokkað og keyrt Perl eða Bash forskriftir í gegnum Fast Common Gateway Interface, verða sýndargestgjafar að vera stilltir með Fcgiwrap skilgreiningum á rótarslóð eða staðsetningaryfirlýsingum.

Dæmi er sett hér að neðan (localhost), sem virkjar Perl og CGI forskriftir á öllum skrám sem eru settar í rótarslóð (/var/www/localhost/htdocs/) með .pl og .cgi ending með Fcgiwrap TCP Sockets fyrir sjálfgefna rótarskjalsslóð, önnur staðsetningin notar Unix Domain Sockets, með index.pl skrá og þriðja staðsetningin er að nota TCP fals með index.cgi skrá.

Settu eftirfarandi efni, eða bara hluta þess, í sýndarhýsilstillingarskrána þína sem þú vilt virkja kraftmikla Perl eða Bash forskriftir með UNIX eða TCP Sockets á mismunandi stöðum, með því að breyta fastcgi_pass rökfærsluyfirlýsingu.

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

Breyttu localhost.conf þannig að það líti út eins og í sniðmátinu hér að neðan.

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. Eftir að þú hefur lokið við að breyta Nginx localhost.conf, eða tilteknu Virtual Host stillingarskránni þinni, farðu yfir á sjálfgefna skjalarótarslóð vefsíðunnar þinnar, búðu til þessar tvær möppur til að endurspegla staðsetningaryfirlýsinguna þína og búðu til vísitöluskrár fyrir hver staðsetning með tilteknu framlengingu.

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

Búðu til index.pl skrá á öðrum stað með eftirfarandi efni.

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

Bættu þessu efni við til að fá umhverfisbreytur.

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

Búðu síðan til index.cgi skrá á þriðja stað með eftirfarandi efni.

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

Bættu þessu efni við til að fá umhverfisbreytur.

#!/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. Þegar búið er að breyta, gerðu báðar skrárnar keyranlegar, endurræstu Nginx þjóninn og vertu viss um að báðar Fcgiwrap falsarnir séu í gangi.

# 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

Næst skaltu beina staðbundnum vafranum þínum á eftirfarandi vefslóð.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Niðurstaðan ætti að birtast eins og á skjámyndum hér að neðan.

8. Ef allt er á sínum stað og rétt stillt, virkjaðu báða Fcgiwrap púkana til að byrja sjálfkrafa, eftir endurræsingu með því að gefa út eftirfarandi skipanir (ef þú hefur stillt Nginx til að nota báðar CGI innstungurnar).

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

Skref 3: Virkjaðu Ruby stuðning á Fcgiwrap

9. Ef þú þarft að keyra kraftmikla Ruby forskriftir á Nginx FCGI verður þú að setja upp Ruby túlk á Gentoo með eftirfarandi skipun.

# emerge --ask ruby

10. Eftir að pakkinn hefur verið tekinn saman og settur upp, farðu í Nginx sites-available og breyttu localhost.conf skránni með því að bæta við eftirfarandi yfirlýsingum fyrir síðasta krullaða sviga \ } , sem virkjar stuðning til að keyra Ruby forskriftir á fjórða stað undir sjálfgefna rótarslóð skjalsins sem þjónað er af Nginx localhost.

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

Notaðu eftirfarandi Nginx tilskipanir.

## 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ú, til að prófa stillingar búðu til fjórðu möppuna undir /var/www/localhost/htdocs slóð, búðu til keyranlegt Ruby index script með .rb endingunni og bættu við eftirfarandi efni.

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

Ruby index.rb dæmi.

#!/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. Eftir að þú hefur bætt við framkvæmdarheimildum á skrá skaltu endurræsa Nginx púkinn til að beita stillingum.

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

Opnaðu vafrann þinn og farðu að slóðinni http://localhost/fjórði/, sem ætti að kynna þér eftirfarandi efni.

Það er það í bili, þú hefur stillt Nginx til að þjóna kraftmiklum Perl, Ruby og Bash forskriftum á FastCGI Gateway, en vertu meðvituð um að keyra svona túlkuð forskriftir á Nginx CGI Gateway getur verið hættulegt og valdið alvarlegri öryggisáhættu á netþjóninum þínum vegna þess að þeir keyra með virkum skeljum undir kerfinu þínu, en getur stækkað kyrrstöðuhindrun sem settur er af kyrrstæðum HTML, sem bætir kraftmikilli virkni við vefsíðuna þína.