FcgiWrap instalēšana un Perl, Ruby un Bash dinamisko valodu iespējošana Gentoo LEMP


Šī apmācība ir cieši saistīta ar iepriekšējo LEMP instalēšanas programmu Gentoo, un tajā tiek aplūkoti citi servera paplašināti jautājumi, piemēram, dinamisko skriptu valodu, piemēram, Perl vai Bash vai Ruby, iespējošana, izmantojot Fcgiwrap Gateway, un rediģēšana Nginx Virtual Hosts konfigurācijas failos, lai kalpotu dinamiskam saturam, izmantojot .pl , .rb un .cgi skripti.

  1. Gentoo instalēta LEMP kaudze - https://linux-console.net/install-lemp-in-gentoo-linux/

1. darbība: iespējojiet FCGIWRAP vietnē Gentoo LEMP

Fcgiwrap ir daļa no Nginx FastCGI Common Gateway Interface , kas apstrādā citas dinamisko skriptu valodas, piemēram, Perl, Bash vai Ruby skriptus, darbojas, apstrādājot no Nginx saņemtos pieprasījumus, izmantojot TCP vai Unix Sockets patstāvīgi atgriež iegūto rezultātu atpakaļ Nginx, kas laika gaitā atbildes nosūtīs atpakaļ gala klientiem.

1. Vispirms sāksim instalēt procesu FCcgiwrap Gentoo Linux, izmantojot šādu komandu.

# emerge --ask www-misc/fcgiwrap

2. Pēc noklusējuma Fcgiwrap pakotne Gentoo nesniedz init skriptus procesa pārvaldībai. Pēc pakotņu apkopošanas un instalēšanas izveidojiet šādus init skriptus, kas palīdz pārvaldīt Fcgiwrap procesu, izmantojot trīs pieejas: vai nu palaižot procesu, izmantojot Unix domēna ligzdas vai izmantojot vietējo < b> TCP ligzdas vai vienlaikus izmantojat abas.

Izveidojiet init failu ceļā /etc/init.d/ ar šādu faila saturu.

# nano /etc/init.d/fcgiwrap

Pievienojiet šādu faila saturu.

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

Kā redzat, skripta faila sākumā ir divi mainīgie, attiecīgi ip un ports . Mainiet šos mainīgos atbilstoši savām vajadzībām un pārliecinieties, ka tie nepārklājas ar citiem jūsu sistēmas pakalpojumiem, īpaši ar porta mainīgo - šeit noklusējums ir 12345 - attiecīgi mainiet.

0.0.0.0 izmantošana IP mainīgajā ļauj procesam sasaistīties un klausīties jebkurā IP (ārpus piekļuves, ja jums nav ugunsmūra), taču drošības apsvērumu dēļ jums tas jāmaina, lai klausītos tikai lokāli, uz 127.0.0.1 , ja vien jums nav citu iemeslu, piemēram, attālināti iestatīt Fcgiwrap vārteju citā mezglā veiktspējas vai slodzes līdzsvarošanai.

3. Pēc faila izveides pievienojiet izpildes atļaujas un pārvaldiet dēmona procesu, izmantojot starta, apturēšanas vai statusa slēdžus. Statusa slēdzis parādīs atbilstošu kontaktligzdas informāciju, piemēram, IP-PORT pārī, kuru tas klausās, un, ja ir aktīvs savienojums, tas tika inicializēts. Turklāt, ja procesam ir aktīvi savienojumi stāvoklī TIME_WAIT , to nevar restartēt, kamēr visi TCP savienojumi nav aizvērti.

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

Kā tika parādīts iepriekš, Fcgiwrap var darboties vienlaikus, izmantojot abas ligzdas, tāpēc nedaudz mainīs otrā skripta nosaukumu uz fcgiwrap-unix-socket , lai nodrošinātu, ka abus var startēt un palaist vienlaicīgi.

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

UNIX ligzdai izmantojiet šādu faila saturu.

#!/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. Vēlreiz pārliecinieties, ka šis fails ir izpildāms, un izmantojiet tos pašus pakalpojumu slēdžus: start , stop vai status . Esmu iestatījis šīs kontaktligzdas noklusējuma ceļu uz /run/fcgiwrap-unix.sock sistēmas ceļa. Sāciet procesu un pārbaudiet to, izmantojot statusa slēdzi vai sarakstu /palaist direktorija saturu un atrodiet kontaktligzdu vai izmantojiet ps -a | grep fcgiwrap komanda.

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

Kā jau iepriekš minēts, Fcgiwrap var darboties gan ar TCP, gan UNIX ligzdām vienlaicīgi, taču, ja ārējie vārtejas savienojumi nav nepieciešami, palieciet tikai pie Unix domēna ligzdas , jo tā izmanto starpprocesu komunikāciju, kas ir ātrāka nekā komunikācija TCP atgriezeniskās saites savienojumi un tiek izmantots mazāk TCP pieskaitāmo izmaksu.

2. darbība: iespējojiet CGI skriptus Nginx

5. Lai Nginx varētu parsēt un palaist Perl vai Bash skriptus, izmantojot Fast Common Gateway Interface, virtuālajiem saimniekiem jābūt konfigurētiem ar Fcgiwrap definīcijām saknes ceļa vai atrašanās vietas paziņojumos.

Zemāk ir sniegts piemērs (localhost), kas aktivizē Perl un CGI skriptus visiem failiem, kas ievietoti saknes ceļā (/var/www/localhost/htdocs/) ar .pl un .cgi paplašinājums, izmantojot noklusējuma saknes dokumenta ceļu, izmantojot Fcgiwrap TCP ligzdas, otrā vieta, izmantojot Unix domēna ligzdas , ar failu index.pl un trešajā vietā tiek izmantotas TCP ligzdas ar failu index.cgi .

Novietojiet šo saturu vai tikai dažas tā daļas vēlamajā virtuālā resursdatora konfigurācijas failā, kurā vēlaties aktivizēt dinamiskos Perl vai Bash skriptus ar UNIX vai TCP ligzdām dažādās vietās, modificējot argumentu fastcgi_pass .

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

Rediģējiet vietni localhost.conf , lai izskatās šādi.

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. Kad esat pabeidzis rediģēt Nginx localhost.conf vai konkrēto virtuālā resursdatora konfigurācijas failu, pārejiet uz vietnes noklusējuma dokumenta saknes ceļu, izveidojiet šīs divas mapes, lai atspoguļotu jūsu atrašanās vietas paziņojumu, un izveidojiet indeksa failus katrā vietā ar konkrētu pagarinājumu.

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

Izveidojiet failu index.pl otrajā vietā ar šādu saturu.

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

Pievienojiet šo saturu, lai iegūtu vides mainīgos.

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

Pēc tam trešajā vietā izveidojiet failu index.cgi ar šādu saturu.

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

Pievienojiet šo saturu, lai iegūtu vides mainīgos.

#!/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. Pabeidzot rediģēšanu, padariet abus failus izpildāmus, restartējiet Nginx serveri un pārliecinieties, vai darbojas abas Fcgiwrap ligzdas.

# 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

Pēc tam novirziet vietējo pārlūkprogrammu uz šādu URL.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Rezultātam vajadzētu parādīties tāpat kā zemāk esošajos ekrānuzņēmumos.

8. Ja viss ir vietā un pareizi konfigurēts, ļaujiet abiem Fcgiwrap dēmoniem automātiski startēt pēc pārstartēšanas, izsniedzot šādas komandas (ja esat konfigurējis Nginx izmantot abas CGI ligzdas).

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

3. solis: aktivizējiet Ruby atbalstu vietnē Fcgiwrap

9. Ja Nginx FCGI ir jāpalaiž dinamiski skripti, Gentoo jāinstalē tulks Ruby ar šādu komandu.

# emerge --ask ruby

10. Pēc pakotnes sastādīšanas un instalēšanas pārejiet uz Nginx vietnes pieejamas un rediģējiet failu localhost.conf , pievienojot šādus apgalvojumus pirms pēdējās cirtainās iekavas “ } ”, kas aktivizē atbalstu, lai palaistu Ruby skriptus ceturtajā vietā zem noklusējuma dokumenta saknes ceļa, kuru apkalpo Nginx localhost.

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

Izmantojiet šīs Nginx direktīvas.

## 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. Tagad, lai pārbaudītu konfigurāciju, izveidojiet ceturto direktoriju zem ceļa /var/www/localhost/htdocs , izveidojiet izpildāmo Ruby indeksa skriptu ar paplašinājumu .rb un pievienojiet šo: saturu.

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

Rubīna index.rb piemērs.

#!/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')

Pēc faila izpildes atļauju pievienošanas restartējiet Nginx dēmonu, lai lietotu konfigurācijas.

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

Atveriet pārlūkprogrammu un pārejiet uz vietrādi URL http:// localhost/ceturtais/, kuram jāparāda šāds saturs.

Tagad tas ir viss, jūs esat konfigurējis Nginx kalpot dinamiskiem Perl, Ruby un Bash skriptiem FastCGI Gateway, taču ņemiet vērā, ka šāda veida interpretētu skriptu palaišana Nginx CGI Gateway var būt bīstama un radīt nopietnus drošības riskus jūsu serverim, jo tie palaist, izmantojot aktīvās čaulas zem jūsu sistēmas, bet var paplašināt statisko barjeru, ko nosaka statiskais HTML, pievienojot jūsu vietnei dinamisku funkcionalitāti.