Weboldal keresés

Az FcgiWrap telepítése és a Perl, Ruby és Bash dinamikus nyelvek engedélyezése a Gentoo LEMP-n


Ez az oktatóanyag szigorúan kapcsolódik a korábbi LEMP telepítéshez Gentoo rendszeren, és más szerverrel kapcsolatos problémákat is kezel, mint például a dinamikus szkriptnyelvek, például a Perl vagy a Bash vagy a Ruby engedélyezése az Fcgiwrap Gateway segítségével, valamint az Nginx Virtual Hosts konfigurációs fájljainak szerkesztése dinamikus tartalmak kiszolgálása .pl, .rb és .cgi szkriptekkel.

Követelmények

  1. LEMP verem telepítve a Gentoo-ra – https://linux-console.net/install-lemp-in-gentoo-linux/

1. lépés: Engedélyezze az FCGIWRAP-ot a Gentoo LEMP-n

Az Fcgiwrap az Nginx FastCGI Common Gateway Interface része, amely más dinamikus szkriptnyelveket, például Perl- vagy Bash- vagy Ruby-szkripteket dolgoz fel, és az Nginxtől kapott kérések feldolgozásával működik TCP-n vagy TCP-n keresztül. A Unix Sockets független módon visszaküldi a kapott eredményt az Nginx-nek, amely időközben visszaküldi a válaszokat a végklienseknek.

1. Először is kezdjük az FCcgiwrap folyamat telepítésével Gentoo Linuxra a következő paranccsal.

emerge --ask www-misc/fcgiwrap

2. Az Fcgiwrap csomag alapértelmezés szerint nem biztosít init szkriptet a Gentoo-n a folyamat kezeléséhez. A csomagok lefordítása és telepítése után hozza létre a következő init szkripteket, amelyek segítenek az Fcgiwrap folyamat kezelésében három megközelítéssel: vagy elindítja a folyamatot a Unix Domain Sockets használatával, vagy a helyi < b>TCP Socketet vagy mindkettőt egyszerre használja.

TCP Socket Script használata

Hozzon létre egy indítófájlt az /etc/init.d/ útvonalon a következő fájltartalommal.

nano /etc/init.d/fcgiwrap

Adja hozzá a következő fájltartalmat.

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

Amint láthatja, a szkriptfájl elején két változó van, az ip és a port. Változtassa meg ezeket a változókat saját igényei szerint, és győződjön meg arról, hogy ne fedjenek át a rendszer más szolgáltatásaival, különösen a portváltozóval – itt az alapértelmezett 12345 – ennek megfelelően módosítsa.

A 0.0.0.0 használata IP-változón lehetővé teszi a folyamat számára, hogy bármilyen IP-n kapcsolódjon és figyeljen (a tűzfal hiányában kívülről is elérhető), de biztonsági okokból módosítania kell, hogy csak helyileg figyeljen. a 127.0.0.1 rendszeren, hacsak nincs más oka, például az Fcgiwrap átjáró távoli beállítása egy másik csomóponton a teljesítmény vagy a terheléselosztás érdekében.

3. A fájl létrehozása után fűzze hozzá a végrehajtási engedélyeket, és kezelje a démonfolyamatot a start, stop vagy állapotkapcsolók segítségével. Az állapotkapcsoló megjeleníti a megfelelő socket-információkat, például az IP-PORT párosítást, és azt, hogy van-e aktív kapcsolat inicializálása. Továbbá, ha a folyamatnak TIME_WAIT állapotban vannak aktív kapcsolatai, akkor nem indíthatja újra, amíg az összes TCP-kapcsolat be nem záródik.

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

Unix Socket Script használata

Ahogy korábban bemutattuk, az Fcgiwrap egyidejűleg is futhat mindkét socket használatával, ezért a második szkript nevét kissé megváltoztatja fcgiwrap-unix-socket-re, hogy biztosítsa, hogy mindkettő egyszerre indítható és futhasson.

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

Használja a következő fájltartalmat a UNIX sockethez.

#!/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. Ismét győződjön meg arról, hogy ez a fájl végrehajtható, és ugyanazokat a szolgáltatáskapcsolókat használja: start, stop vagy status. Ennek a socketnek az alapértelmezett elérési útját a /run/fcgiwrap-unix.sock rendszerútvonalon állítottam be. Indítsa el a folyamatot, és ellenőrizze azt az status kapcsolóval vagy listázza ki a /run könyvtár tartalmát, és keresse meg a socketet, vagy használja a ps -a | grep fcgiwrap parancsot.

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

Ahogy korábban említettük, az Fcgiwrap egyszerre futhat TCP és UNIX socketekkel is, de ha nincs szüksége külső átjárókapcsolatokra, akkor csak a Unix Domain Socket-hez ragaszkodjon, mert folyamatközi kommunikációt használ, ami gyorsabb, mint a kommunikáción keresztül. TCP loopback kapcsolatok, és kevesebb TCP overheadet használ.

2. lépés: Engedélyezze a CGI-parancsfájlokat az Nginx-en

5. Ahhoz, hogy az Nginx elemezze és futtassa a Perl- vagy Bash-szkripteket a Fast Common Gateway Interface-en keresztül, a virtuális gépeket Fcgiwrap-definíciókkal kell konfigurálni a gyökérútvonalon vagy a helyutasításokon.

Az alábbiakban bemutatunk egy példát (localhost), amely aktiválja a Perl és CGI szkripteket minden olyan fájlon, amely a gyökér elérési útban (/var/www/localhost/htdocs/) van .pl > és a .cgi kiterjesztés Fcgiwrap TCP Sockets használatával az alapértelmezett gyökérdokumentum elérési útjaként, a második hely a Unix Domain Sockets használatával, egy index.pl fájllal a harmadik hely pedig TCP socketeket használ egy index.cgi fájllal.

Helyezze el a következő tartalmat, vagy annak csak egy részét a kívánt Virtual Host konfigurációs fájlba, amelyen a dinamikus Perl vagy Bash szkripteket UNIX vagy TCP Socketekkel kívánja aktiválni különböző helyeken a fastcgi_pass argumentumutasítás módosításával.

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

Szerkessze a localhost.conf fájlt az alábbi sablonhoz hasonló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. Miután befejezte az Nginx localhost.conf vagy az adott Virtual Host konfigurációs fájl szerkesztését, lépjen a webhely alapértelmezett dokumentumának gyökérútvonalára, és hozza létre ezt a két mappát, hogy tükrözze a helyét. utasítást, és hozzon létre indexfájlokat minden helyhez a megfelelő kiterjesztéssel.

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

Hozzon létre index.pl fájlt a második helyen a következő tartalommal.

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

Adja hozzá ezt a tartalmat a környezeti változók lekéréséhez.

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

Ezután hozzon létre index.cgi fájlt a harmadik helyen a következő tartalommal.

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

Adja hozzá ezt a tartalmat a környezeti változók lekéréséhez.

#!/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. A szerkesztés befejeztével tegye mindkét fájlt végrehajthatóvá, indítsa újra az Nginx szervert, és győződjön meg arról, hogy mindkét Fcgiwrap socket fut.

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

Ezután irányítsa át helyi böngészőjét a következő URL-re.

http://localhost 

http://localhost/second/ 

http://localhost/third/

Az eredménynek úgy kell megjelennie, mint az alábbi képernyőképeken.

8. Ha minden a helyén van és megfelelően van beállítva, engedélyezze mindkét Fcgiwrap démon automatikus indulását az újraindítás után a következő parancsok kiadásával (ha az Nginxet mindkét CGI-foglalat használatára állította be).

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

3. lépés: Aktiválja a Ruby támogatást az Fcgiwrap-on

9. Ha dinamikus Ruby-szkripteket kell futtatnia az Nginx FCGI-n, telepítenie kell a Ruby értelmezőt a Gentoo-ra a következő paranccsal.

emerge --ask ruby

10. A csomag lefordítása és telepítése után lépjen az Nginx sites-available elemére, és szerkessze a localhost.conf fájlt a következő utasítások hozzáfűzésével. utolsó göndör zárójel “ } ”, amely aktiválja a Ruby-szkriptek futtatásának támogatását egy negyedik helyen, az alapértelmezett dokumentum gyökérútvonalán, amelyet az Nginx localhost szolgál ki.

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

Használja a következő Nginx direktívákat.

## 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. Most a konfiguráció teszteléséhez hozza létre a negyedik könyvtárat a /var/www/localhost/htdocs útvonalon, hozzon létre egy végrehajtható Ruby index szkriptet a .rbvel b> kiterjesztést, és adja hozzá a következő tartalmat.

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

Ruby index.rb példa.

#!/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. Miután hozzáadta a végrehajtási engedélyeket a fájlhoz, indítsa újra az Nginx démont a konfigurációk alkalmazásához.

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

Nyissa meg böngészőjét, és keresse meg a http://localhost/fourth/ URL-t, amely a következő tartalmat jeleníti meg.

Egyelőre ennyi: az Nginxet úgy konfigurálta, hogy dinamikus Perl, Ruby és Bash szkripteket szolgáltasson ki a FastCGI Gateway-en, de ügyeljen arra, hogy az ilyen típusú értelmezett szkriptek futtatása az Nginx CGI Gateway-en veszélyes lehet, és komoly biztonsági kockázatokat jelenthet a szerveren, mert aktív shellekkel fut a rendszer alatt, de kiterjesztheti a statikus HTML által támasztott statikus akadályokat, dinamikus funkciókat adva webhelyéhez.