FcgiWrapin asentaminen ja dynaamisten Perl-, Ruby- ja Bash-kielten käyttöönotto Gentoo LEMP:ssä


Tämä opetusohjelma liittyy tiukasti entiseen Gentoon LEMP-asennukseen ja käsittelee muita palvelimeen liittyviä ongelmia, kuten dynaamisten komentosarjakielten, kuten Perl, Bash tai Ruby, käyttöönottoa Fcgiwrap Gatewayn kautta ja muokkaa Nginx Virtual Hosts -määritystiedostoja tarjota dynaamista sisältöä .pl-, .rb- ja .cgi-skripteillä.

Vaatimukset

  1. Gentoon asennettu LEMP-pino – https://linux-console.net/install-lemp-in-gentoo-linux/

Vaihe 1: Ota FCGIWRAP käyttöön Gentoo LEMP:ssä

Fcgiwrap on osa Nginx FastCGI Common Gateway -liittymää, joka käsittelee muita dynaamisia komentosarjakieliä, kuten Perl- tai Bash- tai Ruby-skriptejä, ja se toimii käsittelemällä Nginxiltä TCP:n tai Unix Sockets, itsenäisesti ja palauttaa tuotetun tuloksen takaisin Nginxille, joka aikavälillä välittää vastaukset takaisin loppuasiakkaille.

1. Aloitetaan asentamalla FCcgiwrap-prosessi Gentoo Linuxiin käyttämällä seuraavaa komentoa.

emerge --ask www-misc/fcgiwrap

2. Oletusarvoisesti Fcgiwrap-paketti ei tarjoa Gentoon init-skriptejä prosessin hallintaan. Kun paketit on käännetty ja asennettu, luo seuraavat init-skriptit, jotka auttavat sinua hallitsemaan Fcgiwrap-prosessia kolmella tavalla: joko käynnistämällä prosessi Unix Domain Socketsilla tai käyttämällä paikallista < b>TCP Sockets tai molempien käyttö samanaikaisesti.

TCP Socket Scriptin käyttäminen

Luo aloitustiedosto polulle /etc/init.d/, jossa on seuraava tiedostosisältö.

nano /etc/init.d/fcgiwrap

Lisää seuraava tiedostosisältö.

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

Kuten näet, komentosarjatiedoston alussa on kaksi muuttujaa, vastaavasti ip ja port. Muuta näitä muuttujia omien tarpeidesi mukaan ja varmista, että ne eivät ole päällekkäisiä järjestelmäsi muiden palveluiden kanssa, etenkään porttimuuttujan kanssa – oletusarvo tässä on 12345 – muuta vastaavasti.

0.0.0.0:n käyttäminen IP-muuttujassa mahdollistaa prosessin sitoutumisen ja kuuntelun missä tahansa IP-osoitteessa (ulkopuolella käytettävissä, jos sinulla ei ole palomuuria ), mutta turvallisuussyistä sinun tulee muuttaa se kuuntelemaan vain paikallisesti, osoitteessa 127.0.0.1, ellei sinulla ole muita syitä, kuten Fcgiwrap-yhdyskäytävän etäasetus eri solmussa suorituskyvyn tai kuormituksen tasapainottamiseksi.

3. Kun tiedosto on luotu, liitä suoritusoikeudet ja hallitse demoniprosessia käynnistys-, pysäytys- tai tilakytkimien avulla. Tilakytkin näyttää sinulle asiaankuuluvat pistorasian tiedot, kuten IP-PORT-pari, jota se kuuntelee ja onko aktiivinen yhteys alustettu. Lisäksi, jos prosessilla on aktiivisia yhteyksiä TIME_WAIT-tilassa, et voi käynnistää sitä uudelleen ennen kuin kaikki TCP-yhteydet sulkeutuvat.

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

Unix Socket Scriptin käyttäminen

Kuten aiemmin esitettiin, Fcgiwrap voi toimia samanaikaisesti molemmilla vastakkeilla, joten se muuttaa hieman toisen komentosarjan nimeksi fcgiwrap-unix-socket varmistaakseen, että molemmat voidaan käynnistää ja suorittaa samaan aikaan.

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

Käytä seuraavaa tiedostosisältöä UNIX-socketille.

#!/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. Varmista jälleen, että tämä tiedosto on suoritettava, ja käytä samoja palvelukytkimiä: käynnistys, pysäytys tai tila. Olen asettanut tämän socketin oletuspolun järjestelmäpolulle /run/fcgiwrap-unix.sock. Aloita prosessi ja varmista se status-kytkimellä tai luetteloimalla /run-hakemiston sisältö ja etsi pistoke, tai käytä ps -a | grep fcgiwrap -komento.

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

Kuten aiemmin mainittiin, Fcgiwrap voi toimia sekä TCP- että UNIX-liitännöissä samanaikaisesti, mutta jos et tarvitse ulkoisia yhdyskäytäviä, käytä vain Unix Domain Socketia, koska se käyttää prosessien välistä viestintää, joka on nopeampaa kuin tiedonsiirto yli. TCP loopback -yhteydet ja käyttää vähemmän TCP:tä.

Vaihe 2: Ota CGI-komentosarjat käyttöön Nginxissä

5. Jotta Nginx voi jäsentää ja ajaa Perl- tai Bash-komentosarjoja Fast Common Gateway Interface -liittymän kautta, virtuaalipalvelimet on määritettävä Fcgiwrap-määritelmillä juuripolussa tai sijaintikäskyissä.

Alla on esimerkki (localhost), joka aktivoi Perl- ja CGI-komentosarjat kaikissa tiedostoissa, jotka on sijoitettu juuripolkuun (/var/www/localhost/htdocs/) ja .pl ja .cgi-laajennus käyttäen Fcgiwrap TCP Socketsia oletusjuuriasiakirjan poluksi, toinen sijainti käyttämällä Unix Domain Sockets -sovellusta index.pl-tiedoston kanssa ja kolmas sijainti käyttää TCP-socketteja index.cgi-tiedoston kanssa.

Sijoita seuraava sisältö tai vain osa siitä haluamaasi Virtual Host -määritystiedostoon, johon haluat aktivoida dynaamiset Perl- tai Bash-komentosarjat UNIX- tai TCP-liitännöillä eri paikkoihin muokkaamalla fastcgi_pass-argumenttilauseketta.

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

Muokkaa localhost.conf-tiedostoa alla olevan mallin kaltaiseksi.

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. Kun olet lopettanut Nginxin localhost.conf- tai tietyn Virtual Host -määritystiedoston muokkaamisen, siirry verkkosivustosi oletusasiakirjan juuripolkuun ja luo nämä kaksi kansiota sijaintisi mukaan. lauseke ja luoda hakemistotiedostoja jokaiselle sijainnille sen tietyllä tunnisteella.

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

Luo index.pl-tiedosto toiseen paikkaan, jossa on seuraava sisältö.

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

Lisää tämä sisältö saadaksesi ympäristömuuttujat.

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

Luo sitten kolmanteen paikkaan index.cgi-tiedosto, jossa on seuraava sisältö.

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

Lisää tämä sisältö saadaksesi ympäristömuuttujat.

#!/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. Kun muokkaus on valmis, tee molemmat tiedostot suoritettaviksi, käynnistä Nginx-palvelin uudelleen ja varmista, että molemmat Fcgiwrap-socketit ovat käynnissä.

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

Ohjaa seuraavaksi paikallinen selaimesi seuraavaan URL-osoitteeseen.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Tuloksen pitäisi näyttää kuten alla olevissa kuvakaappauksissa.

8. Jos kaikki on paikoillaan ja oikein määritetty, ota molemmat Fcgiwrap-daemonit käynnistymään automaattisesti uudelleenkäynnistyksen jälkeen antamalla seuraavat komennot (jos olet määrittänyt Nginxin käyttämään molempia CGI-pistokkeita).

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

Vaihe 3: Aktivoi Ruby-tuki Fcgiwrapissa

9. Jos sinun on suoritettava dynaamisia Ruby-skriptejä Nginx FCGI:ssä, sinun on asennettava Ruby-tulkki Gentoolle seuraavalla komennolla.

emerge --ask ruby

10. Kun paketti on käännetty ja asennettu, siirry kohtaan Nginx sites-available ja muokkaa localhost.conf-tiedostoa liittämällä seuraavat lausunnot ennen viimeinen kihara hakasulke “ } ”, joka aktivoi tuen Ruby-komentosarjojen suorittamiseen neljännessä paikassa Nginx localhostin palveleman oletusasiakirjan juuripolun alla.

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

Käytä seuraavia Nginx-ohjeita.

## 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. Luo nyt neljäs hakemisto /var/www/localhost/htdocs-polun alle luomalla suoritettava Ruby-indeksikomentosarja komennolla .rb testataksesi määrityksiä. b> laajennus ja lisää seuraava sisältö.

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

Ruby index.rb esimerkki.

#!/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. Kun olet lisännyt tiedostoon suoritusoikeudet, käynnistä Nginx-daemon uudelleen määrityksiä varten.

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

Avaa selaimesi ja siirry URL-osoitteeseen http://localhost/fourth/, jonka pitäisi näyttää sinulle seuraava sisältö.

Siinä se nyt, olet määrittänyt Nginxin palvelemaan dynaamisia Perl-, Ruby- ja Bash-skriptejä FastCGI Gatewayssa, mutta ota huomioon, että tällaisten tulkittujen komentosarjojen käyttäminen Nginx CGI Gatewayssa voi olla vaarallista ja aiheuttaa vakavia turvallisuusriskejä palvelimellesi, koska ne käyttää aktiivisia komentotuloksia järjestelmässäsi, mutta se voi laajentaa staattisen HTML:n asettamaa staattista estettä ja lisätä verkkosivustollesi dynaamisia toimintoja.